问题描述
是否可以重命名 wp-admin 文件夹?
我知道我可以重命名它,但除非代码支持许多事情会破坏。
如果我使用自定义文件夹名称,它将使其稍微更安全,安全性不明朗,所有这一切。
最佳解决方案
不幸的是,目前不可能,也不会有意愿将其视为修改,您可以看到这个 recent thread on the wp-hackers list 和 this ticket on trac 。
如果你真的想看到这一点,我建议:
- 提出你的案例 on wp-hackers,但是要预先警告你的 use-case 更好,而不是 「安全性通过晦涩」,否则将被击落如上。
- 在 a trac ticket 中提出您的论点,并提供相同的警告。
- 更好的是,将 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。