Come reindirizzare/riscrivere tutte le richieste /wp-login
Esiste un modo semplice per far sì che WordPress, PHP o Apache riscrivano tutti gli URL che contengono /wp-admin in /admin?
Ho aggiunto questa riga al mio file .htaccess:
RewriteRule ^admin /wp-login.php [L]
Tuttavia, anche se domain.com/admin mostra correttamente la pagina di login, tutte le pagine dopo l'accesso mostrano l'URL come /wp-admin mentre vorrei che mostrasse sempre /admin.
Qualche suggerimento su questo?
Per rispondere alla tua domanda riguardo alla configurazione del layout degli URL in Apache tramite mod_rewrite (il modulo di Apache che gestisce la riscrittura degli URL), questo potrebbe essere utile:
RewriteRule ^admin/(.*)$ /wp-admin/$1 [QSA,L]
(direttiva di configurazione non testata, consulta la documentazione nel caso generi errori)
Questo tradurrà fondamentalmente qualsiasi richiesta a /admin/... in /wp-admin/... .
Se questa è l'unica cosa che vorresti sapere, devo ammettere che è leggermente fuori tema per worpdress@se poiché si tratta in realtà di una domanda su come configurare il server web Apache. Un posto migliore potrebbe essere serverfault.
Tieni presente che questo riscrive solo gli URL richiesti. WordPress non saprebbe nulla di questo e continuerebbe a generare link verso /wp-admin/ nell'area di amministrazione. Esiste un hook per qualsiasi URL di amministrazione che potresti voler riscrivere anche tu:
return apply_filters('admin_url', $url, $path, $blog_id);
Dovresti sostituire la parte domain/wp-admin/ con domain/admin/ utilizzando un filtro personalizzato.
@hakre -- Grazie, questo è praticamente esattamente quello che stavo cercando. L'aspetto con cui ho meno familiarità è la parte relativa ad apply_filters. Immagino che questo vada inserito nel file functions.php verso l'inizio, corretto? Potresti fornire un esempio di questa riga WordPress che modificherebbe automaticamente tutte le richieste /wp-admin/(.*) in /admin/(.*)?
NetConstructor.com
È un po' più complesso, poiché richiede anche alcune impostazioni aggiuntive. Ho creato un plugin must-use come riferimento: https://gist.github.com/701245#file_change_admin_url.php
hakre
@hakre -- Ho provato il codice che hai postato su GitHub ma non sembra funzionare per me. Per qualche strana ragione non riuscivo nemmeno a vedere il plugin. Quello che ho notato è che hai detto di posizionarlo nella cartella mu-plugins, ma immagino che posizionarlo nella normale cartella dei plugin (senza mu) funzionerebbe ugualmente (anche se hai cambiato il nome della cartella dei plugin (definito tramite il file wp-config)?
NetConstructor.com
Se creato e posizionato correttamente nella cartella dei plugin must use, dovresti poter vedere il nome del file elencato sotto la scheda "Must Use" nella sezione Plugin: http://tinypic.com/view.php?pic=2h4mclc&s=7 - Altrimenti non mi stupirei che non funzioni. Prima assicurati che sia lì. Non dimenticare di configurare anche il file .htaccess.
hakre
@Rarst -- Ho rivisto questa cosa e ho notato che in realtà ero io a sbagliare. Una volta inserito il codice in mu-plugins ha funzionato! Due domande di follow-up per favore... come posso modificare il tuo codice per poterlo scrivere direttamente nel mio file functions.php? La seconda domanda è... come posso fare in modo che tutte le richieste a /wp-admin, /wp-admin/index.php e /wp-login.php restituiscano un errore 404? Il mio obiettivo è fare in modo che solo /admin o /admin/index.php mostrino una pagina di login e tutte le altre restituiscano un errore
NetConstructor.com
Puoi provare a mettere il file accanto al tuo function.php e includerlo all'inizio del tuo function.php. Ma potrebbe non funzionare perché potrebbe essere già troppo tardi per riconfigurare i cookie. Quindi sei avvisato :) -
hakre
Per il problema del 404, chiedi su serverfault come puoi effettuare questa configurazione con il tuo webserver.
hakre
Dove esattamente inserisci la riga "RewriteRule ^admin/(.*)$ /wp-admin/$1 [QSA,L]"???
trusktr
Dove dovrei inserire il codice return apply_filters('admin_url', $url, $path, $blog_id);
User
hakre.... Ottima risposta... ora con l'ultima versione di WordPress che ha un'amministrazione di rete separata, ho utilizzato la tua soluzione e ho aggiunto la parte per riscrivere correttamente i link "Amministrazione di rete" nello stesso modo...
/**
* Cambia URL Amministrazione
*
* Copyright (C) 2010 hakre <http://hakre.wordpress.com/>
*
* Questo programma è software libero: puoi redistribuirlo e/o modificarlo
* nei termini della GNU Affero General Public License come pubblicata da
* la Free Software Foundation, sia la versione 3 della
* Licenza, o (a tua scelta) qualsiasi versione successiva.
*
* Questo programma è distribuito nella speranza che sia utile,
* ma SENZA ALCUNA GARANZIA; senza neanche la garanzia implicita di
* COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPO. Vedere la
* GNU Affero General Public License per maggiori dettagli.
*
* Dovresti aver ricevuto una copia della GNU Affero General Public License
* insieme a questo programma. In caso contrario, vedi <http://www.gnu.org/licenses/>.
*
* UTILIZZO:
*
* Copia il file nella directory wp-content/mu-plugins e aggiungi la
* seguente RewriteRule alla configurazione Apache o al file .htaccess:
*
* RewriteRule ^admin/(.*)$ wp-admin/$1 [QSA,L]
*
* Questo riscriverà l'URL di amministrazione di WordPress
*
* da: http://esempio.com/wp-admin/ ...
* a : http://esempio.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 per inserire in .htacces all'attivazione del plugin
*
*/
/** Versione aggiornata da 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);//Aggiunto da 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;
}
// Aggiunto da 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;
}
}
hai riscontrato problemi o difficoltà con questo codice? Ho notato che le pagine impiegano più tempo a caricarsi nell'area di amministrazione e alcuni plugin funzionavano in modo un po' strano...
NetConstructor.com
Ciao! Ho appena trovato questo post mentre cercavo una soluzione per sostituire 'wp-'. Qualcuno potrebbe dirmi se ci sono problemi nell'usare questo codice come ha detto @Netcontrucor.com?
Grazie!
user391
Sembra che il tuo codice non funzioni se WordPress è installato su un sottodominio, poiché sembra tentare di reindirizzare al dominio principale. Puoi confermarlo e, in caso affermativo, aggiornare questo codice? Grazie, CH
NetConstructor.com
Per favore aggiungi gli URL dei sottodomini ecc., altrimenti è difficile dirlo // Immagino che i cookie non funzionino correttamente per il cambio di domini con il codice attuale.
hakre
Ehi, dove esattamente devo inserire la RewriteRule all'interno di htaccess in relazione alle altre regole di WordPress?... Ha importanza?
trusktr
A proposito... Ho anche usato un collegamento simbolico da admin -> wp-admin
gruvii
Puoi aggiungere le righe del symlink .htaccess alla risposta come riferimento? Forse hai qualcosa di simile che richiede l'aggiunta della riga -l: http://stackoverflow.com/questions/5412955/htaccess-config-with-symbolic-links-and-index-files-not-working-as-expected ?
majick
Oltre alle soluzioni precedenti, ho trovato i file CSS e script mancanti.
La correzione è:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# file caricati
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]
# aggiungi uno slash finale a /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
# Correzione utilizzando la risposta precedente.
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]
# Correzione per caricare i file CSS, JS e immagini per gli URL admin multisito.
# vecchio codice 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]