web-dev-qa-db-fra.com

Comment rediriger/réécrire toutes les requêtes/wp-login

Existe-t-il un moyen simple de faire en sorte que wordpress, php ou Apache réécrive toutes les URL impliquant /wp-admin à /admin?

J'ai ajouté cette entrée à mon fichier .htaccess:

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

Cependant, bien que domain.com/admin affiche correctement la page de connexion, toutes les pages après vous être connecté affichent l'URL sous la forme /wp-admin que je souhaite toujours afficher /admin.

Des idées à ce sujet?

7
NetConstructor.com

Pour répondre à votre question sous la forme d'une configuration de disposition d'URL Apache via mod_rewrite (le module Apache qui gère la réécriture d'URL), cela pourrait être utile:

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

(directive de configuration non testée, vérifiez la documentation en cas d'erreur)

Cela traduira essentiellement toute requête de/admin/... en/wp-admin/....

Si c’est la seule chose que vous voudriez savoir, je dois admettre que c’est un sujet légèrement hors sujet pour worpdress @ se car il s’agit en fait de savoir comment configurer le serveur Web Apache. Un meilleur endroit pourrait être serverfault .


Gardez à l'esprit que cela ne réécrit que les URL demandées. Wordpress ne saurait rien à ce sujet et il génère toujours des liens vers/wp-admin/sur l'admin. Il existe un point d'ancrage pour toute URL d'administrateur que vous pourriez également vouloir réécrire:

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

Vous devez remplacer la partie domain/wp-admin/ par domain/admin/ par un filtre.

5
hakre

hakre .... Excellente réponse ... maintenant avec la dernière version de wordpress ayant un administrateur réseau séparé J'ai utilisé votre solution et ajouté dans la partie pour réécrire correctement les liens "Administrateur réseau" de la même manière ...

    /**
     * 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;
     }
    }
4
gruvii

En plus des solutions précédentes. J'ai trouvé les fichiers css et script manquants.

le correctif est

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]
1
coderex