Cách chuyển hướng / viết lại tất cả các yêu cầu đăng nhập / wp


7

Có cách nào đơn giản để có wordpress, php hoặc apache viết lại tất cả các url liên quan /wp-adminđến /adminkhông?

Tôi đã thêm mục này vào tệp .htaccess của mình:

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

Tuy nhiên, mặc dù domain.com/adminsẽ hiển thị chính xác trang đăng nhập tất cả các trang sau khi bạn đăng nhập hiển thị URL /wp-adminmà tôi muốn luôn hiển thị /admin.

Bất kỳ suy nghĩ về điều này?



@Rarst - Tôi đã thấy câu hỏi đó nhưng tôi cho rằng câu hỏi của mình được nhắm mục tiêu nhiều hơn và có thể cho phép ai đó trả lời câu hỏi vì dường như điều này có thể xảy ra trong một vòng về cách ...
NetConstructor.com

Trừ khi tôi hiểu nhầm điều gì đó, câu hỏi của bạn hiện đang được diễn đạt chính xác về việc thay đổi wp-adminthành admin, điều này là không thể theo câu trả lời cho câu hỏi khác đó. Nếu bạn muốn đạt được điều gì khác, xin vui lòng viết nó ra một chút? ..
Hết

1
@Rarst - Bạn có chắc chắn không có cách php, apache hoặc wordpress để có được tất cả các liên kết phụ trợ trỏ đến / wp-admin để trỏ đến một thư mục khác không? Tôi biết rằng thông qua mod viết lại một lần có thể tạo một thư mục bí danh và xác định tất cả nội dung cho thư mục đó sẽ được kéo từ một vị trí khác. Vì vậy, tôi nghĩ rằng phải có một số cách để buộc wordpress viết những url đó thay vì / wp-admin ... đó là câu hỏi mà tôi đang theo đuổi. Bạn vẫn đề nghị viết lại?
NetConstructor.com

Câu trả lời:


5

Để trả lời câu hỏi của bạn dưới dạng cấu hình bố cục URL apache thông qua mod_rewrite (mô-đun apache xử lý việc viết lại URL), điều này có thể hữu ích:

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

(chỉ thị cấu hình chưa được kiểm tra, kiểm tra tài liệu trong trường hợp lỗi này)

Điều này về cơ bản sẽ dịch bất kỳ yêu cầu nào sang / admin / ... thành / wp-admin / ....

Nếu đó là điều duy nhất bạn muốn biết, tôi phải thừa nhận rằng điều này hơi lạc đề đối với worpdress @ se vì đây thực sự là một câu hỏi làm thế nào để cấu hình máy chủ web apache. Một nơi tốt hơn có thể là serverfault .


Hãy nhớ rằng điều này chỉ viết lại các URL được yêu cầu. Wordpress sẽ không biết gì về điều này và nó vẫn xuất liên kết đến / wp-admin / trên quản trị viên. Có một cái móc cho bất kỳ URL quản trị nào mà bạn cũng có thể muốn viết lại:

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

Bạn sẽ cần phải tự thay thế domain/wp-admin/một phần bằng domain/admin/bộ lọc.


@hakre - Cảm ơn bạn, đây cơ bản chính xác là những gì tôi đang tìm kiếm. Khu vực tôi ít quen thuộc là khía cạnh application_filters. Tôi giả sử điều này được đặt vào tệp tin.php. Bạn có thể cung cấp một ví dụ về dòng wordpress này sẽ tự động sửa đổi tất cả yêu cầu /wp-admin/(.*) thành /admin/(.*)
NetConstructor.com

3
Nó phức tạp hơn một chút, vì nó cũng cần phải thực hiện một số cài đặt bổ sung. Tôi đã tạo một plugin phải sử dụng để tham khảo: gist.github.com/701245#file_change_admin_url.php
hakre

@hakre - Tôi đã thử mã bạn đăng trên github nhưng điều này dường như không hiệu quả với tôi. Vì một số lý do kỳ lạ, tôi thậm chí không thể nhìn thấy plugin. Những gì tôi đã nhận thấy là bạn đã nói đặt nó vào thư mục mu-plugins nhưng tôi giả sử đặt nó trong thư mục plugin thông thường của bạn (không có mu tại chỗ) cũng sẽ hoạt động (ngay cả khi bạn thay đổi tên của thư mục plugin ( được xác định thông qua tệp wp-config)?
NetConstructor.com

Nếu được tạo và đặt chính xác vào thư mục plugin phải sử dụng, bạn sẽ có thể thấy tên tệp được liệt kê unter tab "Phải sử dụng" trong Plugins: tinypic.com/view.php?pic=2h4mclc&s=7 - Nếu không tôi sẽ không thắc mắc về điều đó nó không hoạt động. Đầu tiên lấy nó ở đó. Đừng quên cấu hình tệp .htaccess.
hakre

@Rarst - Tôi vừa xem lại điều này một lần nữa và nhận thấy rằng thực sự tôi đã làm sai. Khi tôi đặt mã vào mu-plugin, nó hoạt động! Xin vui lòng hai câu hỏi tiếp theo ... làm thế nào tôi có thể sửa đổi mã của bạn để tôi có thể chỉ cần viết nó vào tệp tin.php. Câu hỏi tiếp theo là ... làm cách nào tôi có thể thực hiện tất cả các yêu cầu tới / wp-admin, /wp-admin/index.php và /wp-login.php đưa ra lỗi 404? Mục tiêu của tôi là làm cho nó chỉ để / admin hoặc /admin/index.php cung cấp cho người dùng một trang đăng nhập và tất cả những người khác cung cấp một lỗi
NetConstructor.com

4

hakre .... Câu trả lời tuyệt vời ... bây giờ với phiên bản wordpress mới nhất có quản trị viên mạng riêng biệt, tôi đã sử dụng giải pháp của bạn và thêm vào phần đó để viết lại liên kết "Quản trị mạng" theo cách tương tự ...

    /**
     * Change Admin URL
     * 
     * Copyright (C) 2010  hakre <http://hakre.wordpress.com/>
     * 
     * This program is free software: you can redistribute it and/or modify
     * it under the terms of the GNU Affero General Public License as
     * published by the Free Software Foundation, either version 3 of the
     * License, or (at your option) any later version.
     * 
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU Affero General Public License for more details.
     * 
     * You should have received a copy of the GNU Affero General Public License
     * along with this program.  If not, see <http://www.gnu.org/licenses/>.
     * 
     * USAGE: 
     * 
     * Copy the file into  wp-content/mu-plugins  directory and add the 
     * following RewriteRule to your apache configuration or .htaccess:
     * 
     *  RewriteRule ^admin/(.*)$ wp-admin/$1 [QSA,L]
     * 
     * It will rewrite the wordpress admin-URL 
     *  
     *   from: http://example.com/wp-admin/ ...
     *   to  : 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 - filter to insert into .htacces on plugin activation
     * 
     */
    /** Updated version my 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);//Added by 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;
     }
// Added by 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;
     }
    }

Bạn có gặp bất kỳ vấn đề hoặc vấn đề với mã này? Tôi đã nhận thấy các trang mất nhiều thời gian hơn để tải trên khu vực quản trị và một số plugin có hoạt động hơi lạ ...
NetConstructor.com

Xin chào ! Ngay bây giờ tôi đã tìm thấy bài đăng này khi tìm kiếm một giải pháp để thay thế 'wp-'. Có ai có thể cho tôi biết nếu có bất kỳ vấn đề nào khi sử dụng mã này như @ Netcontrucor.com đã nói không? Cảm ơn !
dùng391

Có vẻ như mã của bạn không hoạt động nếu wordpress được cài đặt trên một tên miền phụ vì nó dường như cố gắng chuyển hướng đến tên miền gốc. Bạn có thể xác nhận điều này và nếu vậy xin vui lòng cập nhật mã này? Cảm ơn, CH
NetConstructor.com

Vui lòng thêm các url của tên miền phụ, v.v. nếu không, thật khó để nói // Tôi có thể tưởng tượng rằng cookie không hoạt động để thay đổi tên miền với mã hiện tại một cách chính xác.
hakre

Xin chào, chính xác thì tôi đặt RewriteRule bên trong htaccess có liên quan gì đến các quy tắc wordpress khác? ... Có vấn đề gì không?
trusktr

1

Ngoài các giải pháp trước đây. Tôi tìm thấy các tập tin css và script bị thiếu.

cách khắc phục là

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

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

# Fix using the previous answer. 
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]

#Fix to load css js image files for multi site admin urls. 
#old code 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]

cảm ơn, bạn đã gặp bất kỳ vấn đề hoặc hạn chế sử dụng phương pháp này?
NetConstructor.com

Tôi sẽ tưởng tượng bất kỳ plugin nào không tuân thủ các tiêu chuẩn WP sẽ không hoạt động.
Hoàng tử Ken
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.