Cómo redirigir/reescribir todas las solicitudes de /wp-login
¿Hay alguna manera simple de hacer que WordPress, PHP o Apache reescriban todas las URLs que involucran /wp-admin a /admin?
He agregado esta entrada a mi archivo .htaccess:
RewriteRule ^admin /wp-login.php [L]
Sin embargo, aunque dominio.com/admin mostrará correctamente la página de inicio de sesión, todas las páginas después de iniciar sesión muestran la URL como /wp-admin, cuando quiero que siempre se muestre como /admin.
¿Alguna sugerencia sobre esto?
Para responder a tu pregunta sobre la configuración de la estructura de URL en Apache mediante mod_rewrite (el módulo de Apache que maneja la reescritura de URLs), esto podría ser útil:
RewriteRule ^admin/(.*)$ /wp-admin/$1 [QSA,L]
(directiva de configuración no probada, consulta la documentación en caso de que esto genere errores)
Esto básicamente traducirá cualquier solicitud a /admin/... en /wp-admin/... .
Si eso es todo lo que deseabas saber, debo admitir que esto está ligeramente fuera de tema para worpdress@se, ya que en realidad es una pregunta sobre cómo configurar el servidor web Apache. Un lugar más adecuado podría ser serverfault.
Ten en cuenta que esto solo reescribe las URLs que se solicitan. WordPress no sabría nada sobre esto y seguiría generando enlaces a /wp-admin/ en el panel de administración. Hay un hook para cualquier URL de administración que también podrías querer reescribir:
return apply_filters('admin_url', $url, $path, $blog_id);
Tendrías que reemplazar la parte dominio/wp-admin/ con dominio/admin/ usando un filtro por tu cuenta.
@hakre -- Gracias, esto es básicamente exactamente lo que estaba buscando. El área con la que estoy menos familiarizado es el aspecto de apply_filters. Supongo que esto se coloca en el archivo functions.php hacia la parte superior, ¿correcto? ¿Podrías posiblemente proporcionar un ejemplo de esta línea de WordPress que modificaría automáticamente todas las solicitudes /wp-admin/(.*) a /admin/(.*)?
NetConstructor.com
Es un poco más complejo, ya que también necesita hacer algunas configuraciones adicionales. He creado un plugin must-use como referencia: https://gist.github.com/701245#file_change_admin_url.php
hakre
@hakre -- He probado el código que publicaste en github pero no pareció funcionar para mí. Por alguna extraña razón ni siquiera pude ver el plugin. Lo que sí noté es que dijiste que lo colocara en la carpeta mu-plugins, pero supongo que colocarlo en tu carpeta regular de plugins (sin mu) también funcionaría (¿incluso si cambiaste el nombre de la carpeta del plugin (definido a través del archivo wp-config)?
NetConstructor.com
Si se crea y coloca correctamente en la carpeta de plugins obligatorios (must use), deberías poder ver el nombre del archivo listado bajo la pestaña "Must Use" en Plugins: http://tinypic.com/view.php?pic=2h4mclc&s=7 - De lo contrario, no me sorprendería que no funcione. Primero asegúrate de que esté ahí. No olvides configurar también el archivo .htaccess.
hakre
@Rarst -- Acabo de revisar esto nuevamente y me di cuenta de que en realidad era yo quien estaba haciendo las cosas mal. Una vez que coloqué el código en mu-plugins ¡funcionó! Dos preguntas de seguimiento por favor... ¿cómo puedo modificar tu código para poder escribirlo directamente en mi archivo functions.php en su lugar? La siguiente pregunta es... ¿cómo puedo hacer que todas las solicitudes a /wp-admin, /wp-admin/index.php y /wp-login.php devuelvan un error 404? Mi objetivo es que solo /admin o /admin/index.php muestren una página de inicio de sesión y todas las demás muestren un error.
NetConstructor.com
Puedes intentar colocar el archivo junto a tu archivo functions.php e incluirlo al principio de tu archivo functions.php. Pero esto podría no funcionar porque podría ser demasiado tarde para reconfigurar las cookies. Así que estás advertido :) -
hakre
Para el problema del error 404, consulta en serverfault cómo puedes hacer esta configuración con tu servidor web.
hakre
¿Dónde exactamente colocas la línea "RewriteRule ^admin/(.*)$ /wp-admin/$1 [QSA,L]" ???
trusktr
¿Dónde debería poner el código return apply_filters('admin_url', $url, $path, $blog_id);?
User
hakre... Excelente respuesta... ahora con la última versión de WordPress que tiene un administrador de red separado, usé tu solución y agregué la parte para reescribir correctamente los enlaces del "Administrador de red" de la misma manera...
/**
* Cambiar URL de Administración
*
* Copyright (C) 2010 hakre <http://hakre.wordpress.com/>
*
* Este programa es software libre: puedes redistribuirlo y/o modificarlo
* bajo los términos de la Licencia Pública General Affero de GNU como
* publicada por la Free Software Foundation, ya sea la versión 3 de la
* Licencia, o (a tu elección) cualquier versión posterior.
*
* Este programa se distribuye con la esperanza de que sea útil,
* pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de
* COMERCIALIZACIÓN o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulta la
* Licencia Pública General Affero de GNU para más detalles.
*
* Deberías haber recibido una copia de la Licencia Pública General Affero de GNU
* junto con este programa. Si no es así, consulta <http://www.gnu.org/licenses/>.
*
* USO:
*
* Copia el archivo en el directorio wp-content/mu-plugins y agrega la siguiente
* regla RewriteRule a tu configuración de Apache o .htaccess:
*
* RewriteRule ^admin/(.*)$ wp-admin/$1 [QSA,L]
*
* Esto reescribirá la URL de administración de WordPress
*
* desde: http://ejemplo.com/wp-admin/ ...
* hacia: http://ejemplo.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 - filtro para insertar en .htaccess al activar el plugin
*
*/
/** Versión actualizada por 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);//Agregado por 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;
}
// Agregado por 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;
}
}
¿Experimentaste algún problema o inconveniente con este código? Noté que las páginas tardaban más en cargarse en el área de administración y algunos plugins funcionaban de manera un poco extraña...
NetConstructor.com
¡Hola! Acabo de encontrar esta publicación mientras buscaba una solución para reemplazar 'wp-'. ¿Alguien podría decirme si hay algún problema al usar este código como mencionó @Netcontrucor.com?
¡Gracias!
user391
Parece que tu código no funciona si WordPress está instalado en un subdominio, ya que intenta redirigir al dominio raíz. ¿Puedes confirmar esto y, de ser así, actualizar el código? Gracias, CH
NetConstructor.com
Por favor agrega las URLs de los subdominios, etc. De lo contrario es difícil decirlo // Me imagino que las cookies no están funcionando correctamente para cambiar dominios con el código actual.
hakre
Oye, ¿dónde coloco exactamente la RewriteRule dentro del htaccess en relación con las otras reglas de WordPress?... ¿Importa?
trusktr
¿Puedes agregar las líneas del symlink .htaccess a la respuesta como referencia? Tal vez tengas algo como esto que requiera agregar la línea -l: http://stackoverflow.com/questions/5412955/htaccess-config-with-symbolic-links-and-index-files-not-working-as-expected ?
majick
Además de las soluciones anteriores, encontré los archivos CSS y scripts que faltaban.
La corrección es:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# archivos subidos
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]
# agregar una barra diagonal al final de /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
# Solución utilizando la respuesta anterior.
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]
# Corrección para cargar archivos CSS, JS e imágenes para URLs de administración multisitio.
# código antiguo 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]