Come reindirizzare/riscrivere tutte le richieste /wp-login

14 nov 2010, 13:56:06
Visualizzazioni: 44.9K
Voti: 9

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?

4
Commenti

possibile duplicato di Posso rinominare la cartella wp-admin?

Rarst Rarst
14 nov 2010 14:15:49

@Rarst -- L'avevo visto ma pensavo che la mia domanda fosse più specifica e potesse consentire a qualcuno di rispondere al quesito dato che sembra che questo dovrebbe essere possibile in qualche modo indiretto...

NetConstructor.com NetConstructor.com
14 nov 2010 14:25:01

A meno che non stia fraintendendo, la tua domanda è attualmente formulata esattamente come la modifica di wp-admin in admin, cosa che non è possibile secondo le risposte all'altra domanda. Se vuoi ottenere qualcos'altro per favore spiegati meglio?..

Rarst Rarst
14 nov 2010 14:40:29

@Rarst -- Sei sicuro che non ci sia un modo in PHP, Apache o WordPress per far sì che tutti i link del backend che puntano a /wp-admin vengano reindirizzati a una directory diversa? So che attraverso mod-rewrite si può creare una cartella alias e definire che tutto il contenuto di quella cartella venga prelevato da una posizione diversa. Quindi immaginavo che ci dovesse essere un modo per forzare WordPress a scrivere quegli URL invece di /wp-admin... questa è la domanda a cui sono interessato. Suggerisci ancora il rewrite?

NetConstructor.com NetConstructor.com
14 nov 2010 17:41:42
Tutte le risposte alla domanda 3
10

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.

15 nov 2010 00:53:52
Commenti

@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 NetConstructor.com
15 nov 2010 07:00:04

È 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
16 nov 2010 02:39:04

@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 NetConstructor.com
19 nov 2010 18:04:16

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 hakre
19 nov 2010 19:31:24

@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 NetConstructor.com
24 nov 2010 19:22:42

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 hakre
24 nov 2010 22:14:21

Per il problema del 404, chiedi su serverfault come puoi effettuare questa configurazione con il tuo webserver.

hakre hakre
24 nov 2010 22:15:32

Dove esattamente inserisci la riga "RewriteRule ^admin/(.*)$ /wp-admin/$1 [QSA,L]"???

trusktr trusktr
17 giu 2011 09:28:37

Dove dovrei inserire il codice return apply_filters('admin_url', $url, $path, $blog_id);

User User
23 ott 2011 19:51:05

@santosh: Collega il filtro all'interno di qualche codice (plugin) tuo. È semplicemente il filtro appropriato, usato come qualsiasi altro filtro :)

hakre hakre
23 ott 2011 23:09:29
Mostra i restanti 5 commenti
7

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;
     }
    }
26 gen 2011 16:18:03
Commenti

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 NetConstructor.com
26 gen 2011 16:45:46

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 user391
30 gen 2011 18:21:49

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 NetConstructor.com
1 feb 2011 17:58:03

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 hakre
8 feb 2011 01:47:29

Ehi, dove esattamente devo inserire la RewriteRule all'interno di htaccess in relazione alle altre regole di WordPress?... Ha importanza?

trusktr trusktr
17 giu 2011 09:32:57

A proposito... Ho anche usato un collegamento simbolico da admin -> wp-admin

gruvii gruvii
9 ago 2011 20:48:59

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 majick
16 mag 2016 08:18:57
Mostra i restanti 2 commenti
2

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]
18 nov 2011 09:43:38
Commenti

grazie, hai riscontrato problemi o limitazioni utilizzando questo approccio?

NetConstructor.com NetConstructor.com
26 nov 2011 05:47:49

Immagino che qualsiasi plugin che non rispetti gli standard di WordPress non funzionerà.

Ken Prince Ken Prince
26 mag 2015 15:13:55