是否禁用前端以仅用作CMS?

时间:2011-05-23 作者:Nick Bedford

我正在使用WordPress数据库和后端管理乐队网站的新闻,一切都很好,但我想禁用WordPress前端本身。

我在中安装了WordPress安装/wordpress/ 很明显,管理部门/wordpress/wp-admin/.

在不影响管理部门的情况下,限制某人访问未设置的WordPress网站的最佳方式是什么?

如果有的话,我可以直接重定向到网站的正确主页(domain.com/).

7 个回复
最合适的回答,由SO网友:Corey McKrill 整理而成

确保只有前端重定向到domain.com, 创建一个使用PHP header()函数的主题。

创建一个名为redirect或Something的文件夹。

在文件夹中添加两个文件:style.cssindex.php(对于有效的WP主题来说是必要的)

  • 英寸style.css, 添加如下内容:

    /*  
       Theme Name: Redirect  
       Description: Redirects the front end to domain.com  
    */
    
  • 英寸index.php 添加以下内容:

    <?php
         header( "Location: http://domain.com" );
    ?>  
    

  • SO网友:Marcin

    使用带有“空数据”的主题。将两个文件放入目录中,然后激活“主题”。

    style.css

    /*
    Theme Name: turn off frontend
    Theme URI: 
    Description: 
    Author: 
    Version: 
    License: GNU 
    License URI: 
    Tags:
    */
    
    以及index.php

    <?php
    exit;
    

    SO网友:Ben Rogmans

    把这个放进你的。htaccess并列出要保持可用的路径:

    RewriteCond %{REQUEST_URI} !^/wp-admin
    RewriteCond %{REQUEST_URI} !^/wp-includes
    RewriteCond %{REQUEST_URI} !^/wp-login
    RewriteCond %{REQUEST_URI} !^/wp-content/uploads
    RewriteCond %{REQUEST_URI} !^/wp-content/plugins
    RewriteCond %{REQUEST_URI} !^/wp-content/cache
    RewriteRule (.*) http://yournewdomain.com/ [R=301,L]
    

    SO网友:dev_masta

    虽然这是一个已经被接受的老问题,但有人可能会觉得这很有用,特别是因为这些解决方案都不适合我。

    function redirect_to_backend() {
        if( !is_admin() ) {
            wp_redirect( site_url(\'wp-admin\') );
            exit();
        }
    }
    add_action( \'init\', \'redirect_to_backend\' );
    
    代码本身很有解释性:

    在“init”钩子上运行检查,检查我们正在加载的页面是否是前端(不是wp admin)

  • 重定向到后端(wp admin)
    • 只需将代码放入任何插件或主题函数中即可。php和它应该是现成的。

      EDIT:

      如果这对您不起作用(即使使用此代码,我也有一些小问题),您可以创建一个新主题(或子主题),并仅将此内容放在header.php 文件:

      <?php
      header("Location: ".get_admin_url());
      exit();
      

    SO网友:supajb

    将此添加到。根目录中的htaccess

    redirect 301 /wordpress http://www.domain.com
    
    编辑:这只是一个快速修复,可能有更好的解决方案。另一种方法是在函数中添加函数。php文件,然后在wp\\u head()中调用该文件以进行重定向。使用这种方法,您还可以通过简单的IP检查来查看它。

    SO网友:nikksan

    在IMO中,插件所需的工作更少,更适合特定情况。

    <?php
    /*
    Plugin Name: Disalbe Frontend
    Description:  Disable the frontend interface of the website, leave only CMS and REST API
    Version: 1.0
    */
    
    add_action(\'init\', \'redirect_to_backend\');
    
    function redirect_to_backend() {
        if(
            !is_admin() &&
            !is_wplogin() &&
            !is_rest()
        ) {
        wp_redirect(site_url(\'wp-admin\'));
        exit();
      }
    }
    
    
    if (!function_exists(\'is_rest\')) {
        /**
         * Checks if the current request is a WP REST API request.
         * 
         * Case #1: After WP_REST_Request initialisation
         * Case #2: Support "plain" permalink settings
         * Case #3: URL Path begins with wp-json/ (your REST prefix)
         *          Also supports WP installations in subfolders
         * 
         * @returns boolean
         * @author matzeeable
         */
        function is_rest() {
            $prefix = rest_get_url_prefix( );
            if (defined(\'REST_REQUEST\') && REST_REQUEST // (#1)
                || isset($_GET[\'rest_route\']) // (#2)
                    && strpos( trim( $_GET[\'rest_route\'], \'\\\\/\' ), $prefix , 0 ) === 0)
                return true;
    
            // (#3)
            $rest_url = wp_parse_url( site_url( $prefix ) );
            $current_url = wp_parse_url( add_query_arg( array( ) ) );
            return strpos( $current_url[\'path\'], $rest_url[\'path\'], 0 ) === 0;
        }
    }
    
    function is_wplogin(){
        $ABSPATH_MY = str_replace(array(\'\\\\\',\'/\'), DIRECTORY_SEPARATOR, ABSPATH);
        return ((in_array($ABSPATH_MY.\'wp-login.php\', get_included_files()) || in_array($ABSPATH_MY.\'wp-register.php\', get_included_files()) ) || (isset($_GLOBALS[\'pagenow\']) && $GLOBALS[\'pagenow\'] === \'wp-login.php\') || $_SERVER[\'PHP_SELF\']== \'/wp-login.php\');
    }
    

    SO网友:DutchPrime
    If you want to keep your REST api working use this in your index.php:
    
    <?php
    /**
     * Front to the WordPress application. This file doesn\'t do anything, but loads
     * wp-blog-header.php which does and tells WordPress to load the theme.
     *
     * @package WordPress
     */
    
    /**
     * Tells WordPress to load the WordPress theme and output it.
     *
     * @var bool
     */
    define( \'WP_USE_THEMES\', false );
    
    /** Loads the WordPress Environment and Template */
    require __DIR__ . \'/wp-blog-header.php\';
    
    结束

    相关推荐

    Front-End Post Submission

    我正在尝试添加一个表单,用户可以从前端提交帖子。我正在学习本教程:http://wpshout。com/wordpress从前端提交帖子/我正在做的是添加this code 到我的一个页面模板。表单显示正常,但当我单击“提交”按钮时,它会显示“Page not found error“”许多评论者说这不起作用。谁能给我指出正确的方向吗?代码是否不完整?有缺陷吗?我做错什么了吗?谢谢Towfiq I。