So leiten Sie alle / wp-login-Anforderungen um / schreiben sie neu

7

Gibt es eine einfache Möglichkeit, WordPress, PHP oder Apache alle dazugehörigen URLs neu schreiben /wp-adminzu lassen /admin?

Ich habe diesen Eintrag zu meiner .htaccess-Datei hinzugefügt:

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

Obwohl domain.com/admindie Anmeldeseite korrekt angezeigt wird, zeigen alle Seiten nach dem Anmelden die URL an, unter /wp-adminder ich immer anzeigen möchte /admin.

Irgendwelche Gedanken dazu?

NetConstructor.com
quelle
Mögliches Duplikat von Kann ich den Ordner wp-admin umbenennen?
Erster
@Rarst - Ich habe das gesehen, aber ich dachte, meine Frage war gezielter und könnte es jemandem ermöglichen, die Frage zu beantworten, da es so scheint, als ob dies irgendwie in
gewisser
Es sei denn , ich etwas Ihre Frage bin Missverständnis ist derzeit als formuliert genau über die Änderung wp-adminzu admin, was zu Antworten auf diese andere Frage nicht möglich nach ist. Wenn Sie etwas anderes erreichen wollen, schreiben Sie es bitte ein wenig auf? ..
Rarst
1
@Rarst - Sind Sie sicher, dass es keine PHP-, Apache- oder WordPress-Methode gibt, um alle Backend-Links zu erhalten, die auf / wp-admin verweisen, um auf ein anderes Verzeichnis zu verweisen? Ich weiß, dass durch mod-rewrite einmal ein Alias-Ordner erstellt und der gesamte Inhalt für diesen Ordner definiert werden kann, der von einem anderen Speicherort abgerufen werden soll. Daher dachte ich mir, dass es eine Möglichkeit geben muss, WordPress zu zwingen, diese URLs anstelle von / wp-admin zu schreiben ... das ist die Frage, nach der ich suche. Schlagen Sie immer noch das Umschreiben vor?
NetConstructor.com

Antworten:

5

Um Ihre Frage als Apache-URL-Layout-Konfiguration über mod_rewrite (das Apache-Modul, das das Umschreiben von URLs übernimmt) zu beantworten, kann dies hilfreich sein:

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

(Ungetestete Konfigurationsanweisung, überprüfen Sie die Dokumente, falls dies zu Fehlern führt.)

Dies übersetzt grundsätzlich jede Anfrage an / admin / ... in / wp-admin / ....

Wenn dies das einzige ist, was Sie wissen möchten, muss ich zugeben, dass dies für worpdress @ se etwas vom Thema abweicht, da dies akut eine Frage zur Konfiguration des Apache-Webservers ist. Ein besserer Ort könnte Serverfehler sein .


Beachten Sie, dass dadurch nur die angeforderten URLs neu geschrieben werden. Wordpress würde nichts darüber wissen und gibt dann immer noch Links zu / wp-admin / auf dem Admin aus. Es gibt einen Hook für jede Administrator-URL, die Sie dann möglicherweise auch neu schreiben möchten:

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

Sie müssten das domain/wp-admin/Teil selbst domain/admin/durch einen Filter ersetzen .

hakre
quelle
@hakre - Danke, das ist im Grunde genau das, wonach ich gesucht habe. Der Bereich, mit dem ich weniger vertraut bin, ist der Aspekt apply_filters. Ich gehe davon aus, dass dies in der Datei functions.php oben richtig platziert wird. Könnten Sie möglicherweise ein Beispiel für diese WordPress-Zeile angeben, die automatisch alle /wp-admin/(.*) -Anfragen an /admin/(.*)
NetConstructor.com
3
Es ist etwas komplexer, da auch einige zusätzliche Einstellungen vorgenommen werden müssen. Ich habe ein Must-Use-Plugin als Referenz erstellt: gist.github.com/701245#file_change_admin_url.php
hakre
@hakre - Ich habe den Code ausprobiert, den Sie auf github gepostet haben, aber das schien bei mir nicht zu funktionieren. Aus irgendeinem seltsamen Grund konnte ich das Plugin nicht einmal sehen. Was mir aufgefallen ist, dass Sie gesagt haben, dass Sie es im Ordner "mu-plugins" ablegen sollen, aber ich gehe davon aus, dass das Ablegen in Ihrem regulären Plugins-Ordner (ohne mu an Ort und Stelle) auch funktioniert (selbst wenn Sie den Namen des Plugin-Ordners geändert haben ( definiert durch die wp-config-Datei)?
NetConstructor.com
Bei korrekter Erstellung und Platzierung im Plugin-Ordner "Muss verwendet werden" sollte der Dateiname unter der Registerkarte "Muss" unter Plugins aufgeführt sein: tinypic.com/view.php?pic=2h4mclc&s=7 - Andernfalls würde ich mich nicht wundern darüber funktioniert es nicht. Holen Sie es zuerst dort. Vergessen Sie nicht, auch die .htaccess-Datei zu konfigurieren.
hakre
@Rarst - Ich habe das gerade noch einmal durchgesehen und festgestellt, dass ich es tatsächlich war, der die Dinge falsch gemacht hat. Sobald ich den Code in Mu-Plugins platziert habe, hat es funktioniert! Bitte zwei weitere Fragen ... Wie kann ich Ihren Code so ändern, dass ich ihn stattdessen einfach in meine Datei functions.php schreiben kann? Die nächste Frage ist ... wie kann ich alle Anfragen an / wp-admin, /wp-admin/index.php und /wp-login.php mit einem 404-Fehler versehen? Mein Ziel ist es, es so zu machen, dass nur / admin oder /admin/index.php einem Benutzer eine Anmeldeseite gibt und alle anderen einen Fehler liefern
NetConstructor.com
4

hakre .... Tolle Antwort ... jetzt mit der neuesten Version von WordPress mit einem separaten Netzwerkadministrator habe ich Ihre Lösung verwendet und in dem Teil hinzugefügt, um die "Netzwerkadministrator" -Links auf die gleiche Weise richtig umzuschreiben ...

    /**
     * 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;
     }
    }
gruvii
quelle
Haben Sie Probleme mit diesem Code festgestellt? Ich bemerkte, dass das Laden von Seiten im Admin-Bereich länger
dauerte
Hallo ! Gerade habe ich diesen Beitrag gefunden, als ich nach einer Lösung gesucht habe, um 'wp-' zu ersetzen. Kann mir jemand sagen, ob es Probleme bei der Verwendung dieses Codes gibt, wie @ Netcontrucor.com sagte? Vielen Dank !
user391
Es scheint, dass Ihr Code nicht funktioniert, wenn WordPress in einer Subdomain installiert ist, da er versucht, zum Root-Domain-Namen umzuleiten. Können Sie dies bestätigen und wenn ja, aktualisieren Sie bitte diesen Code? Vielen Dank, CH
NetConstructor.com
Bitte fügen Sie URLs der Subdomains usw. hinzu. Andernfalls ist es schwer zu sagen. // Ich kann mir vorstellen, dass Cookies nicht funktionieren, um Domains mit dem aktuellen Code richtig zu ändern.
hakre
Hey, wo genau platziere ich die RewriteRule in Bezug auf die anderen WordPress-Regeln in htaccess? ... Ist das wichtig?
Trusktr
1

Neben den bisherigen Lösungen. Ich habe die fehlenden CSS- und Skriptdateien gefunden.

Das Update ist

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]
Coderex
quelle
Vielen Dank, haben Sie Probleme oder Einschränkungen bei diesem Ansatz festgestellt?
NetConstructor.com
Ich würde mir vorstellen, dass Plugins, die nicht den WP-Standards entsprechen, nicht funktionieren.
Ken Prince