禁用前端仅用作CMS?


18

我正在使用WordPress数据库和后端来管理乐队网站的新闻,并且一切正常,但是我想禁用WordPress本身的前端。

我已经在其中安装了WordPress安装/wordpress/,显然admin部分位于/wordpress/wp-admin/

限制某人访问相当* un * setup的WordPress网站本身而不影响管理员部分的最佳方法是什么?

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

Answers:


19

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

  • 创建一个名为redirect或其他名称的文件夹。
  • 将两个文件添加到文件夹:style.cssindex.php (有效的WP主题必需)
  • 在中style.css,添加如下内容:

    / *
    主题名称:重定向
    说明:将前端重定向到domain.com
    * /

  • index.php添加此:

    header(“ Location:http : //domain.com ”);

  • 将文件夹上载到主题目录,然后在管理界面中将其激活。

有趣的是,我的脑海里刚刚熄灭了灯光。为什么不制作一个可重定向的主题!谢谢。
Nick Bedford

1
对于某些人来说可能是显而易见的,但这仅对index.php的第一行有效<?php
芬斯伯里

8

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

style.css

/*
Theme Name: turn off frontend
Theme URI: 
Description: 
Author: 
Version: 
License: GNU 
License URI: 
Tags:
*/

index.php

<?php
exit;

我喜欢这种解决方案,这样您就可以轻松切换回完整的工作主题。此外,您可以添加类似的内容<?php wp_redirect(site_url('wp-admin'));die();而不是退出来自动重定向到给定资源。
MiCc83 '16

3

将其放在您的.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]

2

将此添加到您的根目录中的.htaccess

redirect 301 /wordpress http://www.domain.com

编辑:这实际上只是一个快速修复,可能会有更好的解决方案。另一种方法是将一个函数添加到您的functions.php文件中,然后在wp_head()中调用该函数以进行重定向。使用该方法,您还可以通过简单的IP检查来查看它。


这具有副作用,/wordpress/wp-admin现在重定向到//wp-admin
Nick Bedford

1

尽管这是一个相当古老的问题,而且已经得到了公认的答案,但是有人可能会发现这很有用,特别是因为这些解决方案都不适合我。

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)

只要将代码放在任何插件或主题的function.php中,它就可以立即使用。

编辑:

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

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

0

IMO,一个插件将需要较少的工作,并且更适合于特定情况。

<?php
/*
Plugin Name: Disalbe Frontend
Description:  Disable the frontend interface of the website, leave only CMS and REST API
Author: Nikola Mihyalov
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');
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.