Как перенаправить/переписать все запросы /wp-login

14 нояб. 2010 г., 13:56:06
Просмотры: 44.9K
Голосов: 9

Есть ли простой способ настроить WordPress, PHP или Apache для переписывания всех URL, содержащих /wp-admin на /admin?

Я добавил следующую запись в файл .htaccess:

RewriteRule ^admin /wp-login.php [L]

Хотя domain.com/admin правильно показывает страницу входа, все страницы после авторизации отображают URL как /wp-admin, а я хочу, чтобы всегда отображалось /admin.

Есть ли какие-то мысли по этому поводу?

4
Комментарии

возможный дубликат Можно ли переименовать папку wp-admin?

Rarst Rarst
14 нояб. 2010 г. 14:15:49

@Rarst -- Я видел тот вопрос, но решил, что мой вопрос более конкретный и, возможно, позволит кому-то ответить, так как кажется, что это должно быть как-то возможно окольными путями...

NetConstructor.com NetConstructor.com
14 нояб. 2010 г. 14:25:01

Если я правильно понял, ваш вопрос в текущей формулировке точно о замене wp-admin на admin, что невозможно согласно ответам на тот другой вопрос. Если вы хотите достичь чего-то другого, пожалуйста, опишите подробнее?..

Rarst Rarst
14 нояб. 2010 г. 14:40:29

@Rarst — Вы уверены, что нет способа через php, apache или wordpress заменить все ссылки в админке, указывающие на /wp-admin, на другой каталог? Я знаю, что через mod-rewrite можно создать алиас папки и указать, что все содержимое этой папки должно браться из другого места. Поэтому я предположил, что должен быть способ заставить wordpress генерировать эти URL с другим путем вместо /wp-admin... вот в чем вопрос. Вы все еще рекомендуете использовать rewrite?

NetConstructor.com NetConstructor.com
14 нояб. 2010 г. 17:41:42
Все ответы на вопрос 3
10

Чтобы ответить на ваш вопрос о настройке URL-адресов в Apache через mod_rewrite (модуль Apache для перезаписи URL), может быть полезно следующее:

RewriteRule ^admin/(.*)$ /wp-admin/$1 [QSA,L]

(непроверенная директива конфигурации, сверьтесь с документацией, если возникнут ошибки)

Это правило преобразует любой запрос к /admin/... в /wp-admin/... .

Если это единственное, что вам нужно знать, должен отметить, что этот вопрос немного выходит за рамки тематики worpdress@se, так как фактически это вопрос о настройке веб-сервера Apache. Лучшим местом для такого вопроса может быть serverfault.


Имейте в виду, что это правило только перезаписывает запрашиваемые URL-адреса. WordPress ничего не знает об этом и по-прежнему выводит ссылки на /wp-admin/ в админке. Для перезаписи этих URL существует специальный хук:

return apply_filters('admin_url', $url, $path, $blog_id);

Вам нужно будет заменить часть domain/wp-admin/ на domain/admin/ с помощью своего фильтра.

15 нояб. 2010 г. 00:53:52
Комментарии

@hakre -- Спасибо, это практически именно то, что я искал. Область, с которой я менее знаком, это аспект apply_filters. Я предполагаю, что это нужно разместить в файле functions.php ближе к началу, верно? Не могли бы вы привести пример этой строки WordPress, которая автоматически изменит все запросы /wp-admin/(.*) на /admin/(.*)?

NetConstructor.com NetConstructor.com
15 нояб. 2010 г. 07:00:04

Это немного сложнее, так как требует дополнительных настроек. Я создал must-use плагин для примера: https://gist.github.com/701245#file_change_admin_url.php

hakre hakre
16 нояб. 2010 г. 02:39:04

@hakre -- Я попробовал код, который вы разместили на GitHub, но он, кажется, не сработал для меня. По какой-то странной причине я даже не смог увидеть плагин. Я заметил, что вы сказали разместить его в папке mu-plugins, но я предполагаю, что размещение в обычной папке plugins (без mu) тоже должно работать (даже если вы изменили имя папки плагина (определено через wp-config файл)?

NetConstructor.com NetConstructor.com
19 нояб. 2010 г. 18:04:16

Если файл создан и правильно размещен в папке must use плагинов, вы должны увидеть его имя в списке под вкладкой "Must Use" в разделе Плагины: http://tinypic.com/view.php?pic=2h4mclc&s=7 - В противном случае неудивительно, что он не работает. Сначала убедитесь, что он там. Не забудьте также настроить файл .htaccess.

hakre hakre
19 нояб. 2010 г. 19:31:24

@Rarst -- Я снова вернулся к этому и заметил, что на самом деле я сам делал что-то не так. Как только я поместил код в mu-plugins, он заработал! Два уточняющих вопроса, пожалуйста... как я могу изменить ваш код, чтобы просто записать его в файл functions.php? И второй вопрос... как сделать так, чтобы все запросы к /wp-admin, /wp-admin/index.php и /wp-login.php выдавали ошибку 404? Моя цель — сделать так, чтобы только /admin или /admin/index.php предоставляли пользователю страницу входа, а все остальные выдавали ошибку.

NetConstructor.com NetConstructor.com
24 нояб. 2010 г. 19:22:42

Вы можете попробовать поместить файл рядом с вашим function.php и подключить его в начале function.php. Но это может не сработать, потому что к тому моменту может быть уже слишком поздно перенастраивать куки. Так что вы предупреждены :)

hakre hakre
24 нояб. 2010 г. 22:14:21

По вопросу 404 ошибки, пожалуйста, спросите на serverfault, как можно выполнить эту конфигурацию на вашем веб-сервере.

hakre hakre
24 нояб. 2010 г. 22:15:32

Куда именно вставить строку "RewriteRule ^admin/(.*)$ /wp-admin/$1 [QSA,L]" ???

trusktr trusktr
17 июн. 2011 г. 09:28:37

Куда мне следует вставить код return apply_filters('admin_url', $url, $path, $blog_id);

User User
23 окт. 2011 г. 19:51:05

@santosh: Подключите этот фильтр в своем (плагине) коде самостоятельно. Это просто подходящий фильтр, используемый как и любой другой фильтр :)

hakre hakre
23 окт. 2011 г. 23:09:29
Показать остальные 5 комментариев
7

hakre.... Отличный ответ... теперь в последней версии WordPress есть отдельная сетевая администрация, я использовал ваше решение и добавил часть для правильной перезаписи ссылок "Network Admin" таким же образом...

    /**
     * Изменение URL админки
     * 
     * Copyright (C) 2010  hakre <http://hakre.wordpress.com/>
     * 
     * Эта программа является свободным программным обеспечением: вы можете распространять и/или изменять
     * ее на условиях GNU Affero General Public License, опубликованной
     * Free Software Foundation, либо версии 3 лицензии, либо
     * (по вашему выбору) любой более поздней версии.
     * 
     * Эта программа распространяется в надежде, что она будет полезной,
     * но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемой гарантии
     * ТОВАРНОГО СОСТОЯНИЯ ПРИ ПРОДАЖЕ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ.
     * Подробнее см. в GNU Affero General Public License.
     * 
     * Вы должны были получить копию GNU Affero General Public License
     * вместе с этой программой. Если нет, см. <http://www.gnu.org/licenses/>.
     * 
     * ИСПОЛЬЗОВАНИЕ: 
     * 
     * Скопируйте файл в директорию wp-content/mu-plugins и добавьте
     * следующее правило RewriteRule в конфигурацию Apache или .htaccess:
     * 
     *  RewriteRule ^admin/(.*)$ wp-admin/$1 [QSA,L]
     * 
     * Оно изменит URL админки WordPress 
     *  
     *   с: http://example.com/wp-admin/ ...
     *   на: http://example.com/admin/ ...
     * 
     * @author hakre <http://hakre.wordpress.com>
     * @see http://wordpress.stackexchange.com/questions/4037/how-to-redirect-rewrite-all-wp-login-requests/4063
     * @todo mod_rewrite_rules - фильтр для вставки в .htaccess при активации плагина
     * 
     */
    /** Обновленная версия от Mark Figueredo, <http://gruvii.com/> **/
    return ChangeAdminUrlPlugin::bootstrap();

    class ChangeAdminUrlPlugin {
     private $renameFrom = 'wp-admin';
     private $renameTo = 'admin';
     static $instance;
     static public function bootstrap() {
      null === self::$instance
       && self::$instance = new self()
       ;
      return self::$instance;
     }
     private function setCookiePath() {
      defined('SITECOOKIEPATH') || define('SITECOOKIEPATH', preg_replace('|https?://[^/]+|i', '', get_option('siteurl') . '/' ) );
      defined('ADMIN_COOKIE_PATH') || define('ADMIN_COOKIE_PATH', SITECOOKIEPATH . $this->renameTo);
     }
     public function __construct() {
      $this->setCookiePath();
      add_action('init', array($this, 'init')) ;
     }
     public function init() {
      add_filter('admin_url', array($this, 'admin_url'), 10, 3);
      add_filter('network_admin_url', array($this, 'network_admin_url'), 10, 3);//Добавлено Mark Figueredo, <http://gruvii.com/>
     }
     public function admin_url($url, $path, $blog_id) {
      $renameFrom = $this->renameFrom;
      $renameTo = $this->renameTo;
      $scheme = 'admin';
      $find = get_site_url($blog_id, $renameFrom.'/', $scheme);
      $replace = get_site_url($blog_id, $renameTo.'/', $scheme);
      (0 === strpos($url, $find))
       && $url = $replace.substr($url, strlen($find))
       ;
      return $url;
     }
// Добавлено Mark Figueredo, <http://gruvii.com/> 
     public function network_admin_url($url, $path) {
      $renameFrom = $this->renameFrom;
      $renameTo = $this->renameTo;
      $scheme = 'admin';
      $find = network_site_url($renameFrom.'/', $scheme);
      $replace = network_site_url($renameTo.'/', $scheme);
      (0 === strpos($url, $find))
       && $url = $replace.substr($url, strlen($find))
       ;
      return $url;
     }
    }
26 янв. 2011 г. 16:18:03
Комментарии

Вы сталкивались с какими-либо проблемами при использовании этого кода? Я заметил, что страницы стали загружаться дольше в админке, а некоторые плагины начали работать странно...

NetConstructor.com NetConstructor.com
26 янв. 2011 г. 16:45:46

Привет! Сейчас нашел этот пост, когда искал решение для замены 'wp-'. Может кто-нибудь сказать, есть ли проблемы с использованием этого кода, как упомянул @Netcontrucor.com?

Спасибо!

user391 user391
30 янв. 2011 г. 18:21:49

Похоже, ваш код не работает, если WordPress установлен на поддомене, так как он пытается перенаправить на основной домен. Можете подтвердить это и, если это так, обновить код? Спасибо, CH

NetConstructor.com NetConstructor.com
1 февр. 2011 г. 17:58:03

Пожалуйста, добавьте URL поддоменов и т.д., иначе сложно сказать // Могу предположить, что cookies не работают должным образом при смене доменов в текущем коде.

hakre hakre
8 февр. 2011 г. 01:47:29

Привет, куда именно в htaccess нужно поместить RewriteRule относительно других правил WordPress?... Имеет ли это значение?

trusktr trusktr
17 июн. 2011 г. 09:32:57

Кстати... Я также использовал симлинк из admin -> wp-admin

gruvii gruvii
9 авг. 2011 г. 20:48:59

Можете добавить строки .htaccess для симлинков в ответ для справки? Возможно, у вас есть что-то подобное, требующее добавления строки с -l: http://stackoverflow.com/questions/5412955/htaccess-config-with-symbolic-links-and-index-files-not-working-as-expected ?

majick majick
16 мая 2016 г. 08:18:57
Показать остальные 2 комментариев
2

В дополнение к предыдущим решениям. Я нашел недостающие файлы CSS и скриптов.

Исправление выглядит так:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# загруженные файлы
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# добавление слеша в конец /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

# Исправление с использованием предыдущего ответа.
RewriteRule ^admin/(.*)$ wp-admin/$1 [QSA,L] 

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule  ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]

# Исправление для загрузки файлов CSS, JS и изображений для URL админки мультисайта.
# старый код RewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
RewriteRule  ^[_0-9a-zA-Z-]+/(.*\.(php|css|js|png|jpg|gif))$ $1 [L]

RewriteRule . index.php [L]
18 нояб. 2011 г. 09:43:38
Комментарии

спасибо, сталкивались ли вы с какими-либо проблемами или ограничениями при использовании этого подхода?

NetConstructor.com NetConstructor.com
26 нояб. 2011 г. 05:47:49

Я предполагаю, что любые плагины, которые не следуют стандартам WordPress, работать не будут.

Ken Prince Ken Prince
26 мая 2015 г. 15:13:55