問題描述

是否可以重命名 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。