问题描述

是否可以重命名 wp-admin 文件夹?

我知道我可以重命名它,但除非代码支持许多事情会破坏。

如果我使用自定义文件夹名称,它将使其稍微更安全,安全性不明朗,所有这一切。

最佳解决方案

不幸的是,目前不可能,也不会有意愿将其视为修改,您可以看到这个 recent thread on the wp-hackers listthis ticket on trac

如果你真的想看到这一点,我建议:

  1. 提出你的案例 on wp-hackers,但是要预先警告你的 use-case 更好,而不是 「安全性通过晦涩」,否则将被击落如上。
  2. a trac ticket 中提出您的论点,并提供相同的警告。
  3. 更好的是,将 a patch 上传到支持您所需功能的 trac 。当工作已经完成时,更难说否定 (当然,他们更喜欢说”no” 比他们说”yes” 要好得多) 。

次佳解决方案

不,您无法重命名该文件夹。 WordPress 源中的多个位置的路径是 hard-coded 。

无论如何,安全隐患并不是真正的安全。

第三种解决方案

如果您想保持 subscriber-level 用户看不到 wp-admin 目录,您可以在自己的目录中创建登录/注册和配置文件/编辑页面的独立版本。然后,您可以通过 htaccess 或 IP 限制来保护您的管理文件夹。 (虽然如果你这样做,你应该为 admin-ajax 文件做一个例外,因为一些插件使用它来添加 AJAX 功能) 。

这种方法为您提供了所需的”obscurity”(这并不太多,但往往使客户和管理者感觉更好),并通过限制对管理员的访问来增加一些真正的安全性。另外,老实说,一个刚刚说”/login” 的网址比”wp-login.php” 好多了。

应该不用说,这不会使你的网站防弹。但这是一个很好的,基本的增强。

第四种方案

WordPress 正式支持的方法是将 WordPress 安装文件移动到 sub-directory 中,同时将站点保留在根目录中,如下所示:

网址:http://my-blog.com

管理员网址:http://my-blog.com/7nxnkkugrdzm/wp-admin

虽然这并不能让您完全自由地更改您的管理员网址,但这意味着您可以使用任何您喜欢的内容。从安全角度来看,这是一样好的。它还具有将所有 WordPress 安装文件移动到用户未知的位置的好处,因此它应该是任何 wordpress 强化策略的一部分。

从 WordPress 食典:Giving WordPress Its Own Directory

另外请注意,虽然这种安全方案被称为 Obscure URL,但它与安全性并不一样。晦涩的 URL 是一个完全有效的安全性方案,与密码一样好,而安全隐患依赖于使用秘密未经证实的程序。

同样的注意事项也适用于密码:调用自定义文件夹,如 7nxnkkugrdzm,而不是 happy-snappy-admin 。此外,请确保您的用户知道管理员网址是一个秘密。

第五种方案

人们一直在问这个问题,但是人们把它标记为重复。然而,选择的答案真的不是问题的答案。

要重命名 wordpress 管理员,您需要采取两个步骤。

在以下代码中,我使用仪表板作为我的新 wp-admin 的名称。将代码中的仪表板更改为您想要命名新管理员的任何内容。

首先你需要告诉 wordpress 你想改变管理员的 URL 。

在线 2558 wp-includes/link-template.php 是代码管理网址的代码。

使用 admin_url 过滤器,您可以使用以下功能成功更改管理员的 URL:

function my_custom_admin_url($path) { 
    return str_replace('wp-admin', 'dashboard', $path); 
}
add_filter('admin_url', 'my_custom_admin_url');

你可以通过这样做来测试你的新网址:

function whats_my_admin_url() {
    $url = admin_url();
    echo '<pre><code>'; print_r( $url ); echo '</code></pre>';
    }
add_action( 'admin_notices', 'whats_my_admin_url' );

但是,如果您在点击管理员时注意到,一切都不起作用,并且某些链接可能会给您 404 找不到或类似的东西。

其次,在您的 wordpress 根目录中更改.htaccess,然后在开始之前添加以下内容。

#CUSTOM ADMIN URL REWRITE
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^dashboard[^/]*$ dashboard/ [R=301,L]
RewriteCond %{QUERY_STRING} (.*)$
RewriteRule ^dashboard(.*)$ wp-admin$1? [QSA,L,NE]
RewriteCond %{QUERY_STRING} (.*)$
RewriteRule ^wp-admin/?$ / [NE,R=404,L]
RewriteCond %{QUERY_STRING} (.*)$
RewriteRule ^wp-admin/(.*)$ dashboard/$1 [QSA,R=301,L,NE]
</IfModule>
#CUSTOM ADMIN URL REWRITE

现在,在编辑.htaccess 时,我不是专家,所以有些可能不是必需的。但是,我从来没有发现它不工作。

这就是整个事情。创建一个文件并放入你的 plugins 文件夹或 mu-plugins 文件夹。 (记住将仪表板的每个实例更改为您首选的管理员网址)

<?php
/**
 * Plugin Name: Change My Admin URL
 * Plugin URI: http://wordpress.stackexchange.com/questions/106/can-i-rename-the-wp-admin-folder
 * Description: Changes the admin url where wp-admin becomes dashboard (or whatever you change it to)
 * Version: 1.0
 * Author: Bryan Willis
 * Author URI: http://profiles.wordpress.org/codecandid
 * License: GPL2
 */

/* 

#CUSTOM ADMIN URL REWRITE FOR HTACCESS
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^dashboard[^/]*$ dashboard/ [R=301,L]
RewriteCond %{QUERY_STRING} (.*)$
RewriteRule ^dashboard(.*)$ wp-admin$1? [QSA,L,NE]
RewriteCond %{QUERY_STRING} (.*)$
RewriteRule ^wp-admin/?$ / [NE,R=404,L]
RewriteCond %{QUERY_STRING} (.*)$
RewriteRule ^wp-admin/(.*)$ dashboard/$1 [QSA,R=301,L,NE]
</IfModule>
#CUSTOM ADMIN URL REWRITE

*/

function my_custom_admin_url($path) { 
    return str_replace('wp-admin', 'dashboard', $path); 
}
add_filter('admin_url', 'my_custom_admin_url');

问题?

我一年没有使用这种方法。您可能会注意到,wp-admin 仍然可以工作哪种类型的吮吸,但它比任何事情更为预防。我有一些编写不当的插件,硬编码 wp-admin 在某些地方,当试图阻止或重定向 wp-admin 时不会加载。我相信有一种方法可以使用 htaccess,但是我没有成功地想出来。此外,这还没有经过多站点或任何类似的测试。

更新:替代方法

这是非常相似的,但由于某些原因,我的上述答案在我尝试的每个主机都无效。

加入.htaccess

 RewriteRule ^admin/(.*) wp-admin/$1?%{QUERY_STRING} [L]

在 mu-plugins 文件夹中创建一个名为 new-admin.php 的文件,并在其中添加:

<?php
define('WP_ADMIN_DIR', 'admin');
defined('SITECOOKIEPATH') || define('SITECOOKIEPATH', preg_replace('|https?://[^/]+|i', '', get_option('siteurl') . '/' ) );
define( 'ADMIN_COOKIE_PATH', SITECOOKIEPATH . WP_ADMIN_DIR);

add_filter('site_url',  'wpadmin_filter', 10, 3);
 function wpadmin_filter( $url, $path, $orig_scheme ) {
  $old  = array( "/(wp-admin)/");
  $admin_dir = WP_ADMIN_DIR;
  $new  = array($admin_dir);
  return preg_replace( $old, $new, $url, 1);
}

注意:这种方法似乎在某些主机上运行得更好,但仍然存在不将 wp-admin 链接重定向到新的管理 URL 的问题。这是我在下面尝试的一种方法。虽然下面这个不行,我认为这是正确的轨道。我不完全确定使用什么钩子。 htaccess 可能是一个更好的选择,但是当我尝试这种方式时,我一直在重定向循环。

add_action('init', 'redirect_wp_admin_url_to_404');
function redirect_wp_admin_url_to_404(){
  $redirect_to = $_SERVER['REQUEST_URI'];
  if(count($_REQUEST)> 0 && array_key_exists('redirect_to', $_REQUEST)){
    $redirect_to = $_REQUEST['redirect_to'];
    $check_wp_admin = stristr($redirect_to, 'wp-admin');
    if($check_wp_admin){
      wp_safe_redirect( '404.php' );
    }
  }
}

第六种方案

这里有一个非常好的教程:

How to Hide WordPress Info from Your Source Code mirror

Includes how to rename wp-content, rename wp-admin, and remove the generator tag from WordPress.

This tutorial will change obvious evidence or indications of it in your source-code, effectively removing WordPress info from your site.

它解释了如何更改文件夹名称,wp-admin 登录 URL,并确保 login.php 重定向到主站点,以便人们可以直接去那里。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。