Cum să redirecționezi/rescrii toate cererile /wp-login
Există vreo modalitate simplă de a face WordPress, PHP sau Apache să rescrie toate URL-urile care conțin /wp-admin în /admin?
Am adăugat această intrare în fișierul meu .htaccess:
RewriteRule ^admin /wp-login.php [L]
Cu toate că domain.com/admin va afișa corect pagina de autentificare, toate paginile după autentificare arată URL-ul ca /wp-admin, iar eu vreau să apară întotdeauna ca /admin.
Aveți vreo sugestie pentru această situație?
Pentru a răspunde la întrebarea ta despre configurația URL-urilor în Apache prin intermediul mod_rewrite (modulul Apache care se ocupă de rescrierea URL-urilor), acest lucru ar putea fi util:
RewriteRule ^admin/(.*)$ /wp-admin/$1 [QSA,L]
(directivă de configurație netestată, verifică documentația în cazul în care acest lucru produce erori)
Aceasta va traduce orice cerere către /admin/... în /wp-admin/... .
Dacă acesta este singurul lucru pe care dorești să-l afli, trebuie să recunosc că acest subiect este ușor în afara temei pe worpdress@se, deoarece este de fapt o întrebare despre cum să configurezi serverul web Apache. Un loc mai potrivit ar putea fi serverfault.
Ține minte că aceasta rescrie doar URL-urile care sunt solicitate. WordPress nu ar ști nimic despre acest lucru și va continua să afișeze linkuri către /wp-admin/ în panoul de administrare. Există un filtru pentru orice URL de administrare pe care ai putea dori să-l rescrii și tu:
return apply_filters('admin_url', $url, $path, $blog_id);
Va trebui să înlocuiești partea domain/wp-admin/ cu domain/admin/ cu ajutorul unui filtru pe care îl vei crea tu.
@hakre -- Mulțumesc, aceasta este practic exact ceea ce căutam. Partea cu care sunt mai puțin familiarizat este aspectul apply_filters. Presupun că acest cod trebuie plasat în fișierul functions.php spre început, corect? Ai putea oferi, te rog, un exemplu de linie WordPress care ar modifica automat toate cererile /wp-admin/(.*) în /admin/(.*)?
NetConstructor.com
Este un pic mai complex, deoarece necesită și alte setări adiționale. Am creat un plugin must-use pentru referință: https://gist.github.com/701245#file_change_admin_url.php
hakre
@hakre -- Am încercat codul pe care l-ai postat pe github, dar nu pare să funcționeze în cazul meu. Din motive necunoscute, nici măcar nu am putut vedea plugin-ul. Ce am observat este că ai menționat să-l plasez în folderul mu-plugins, dar presupun că plasarea lui în folderul obișnuit de plugin-uri (fără mu) ar funcționa la fel (chiar dacă ai schimbat numele folderului de plugin-uri (definit prin fișierul wp-config)?
NetConstructor.com
Dacă este creat și plasat corect în folderul de pluginuri obligatorii (must use), ar trebui să poți vedea numele fișierului listat în fila "Must Use" din secțiunea de Pluginuri: http://tinypic.com/view.php?pic=2h4mclc&s=7 - Altfel, nu m-aș mira că nu funcționează. Mai întâi asigură-te că ajunge acolo. Nu uita să configurezi și fișierul .htaccess.
hakre
@Rarst -- Tocmai am revizuit acest lucru și am observat că de fapt eu greșeam. După ce am plasat codul în mu-plugins, a funcționat! Două întrebări de follow-up, te rog... cum pot modifica codul tău ca să-l pot scrie direct în fișierul functions.php în loc? Următoarea întrebare este... cum pot face ca toate cererile către /wp-admin, /wp-admin/index.php și /wp-login.php să returneze o eroare 404? Scopul meu este să fac ca doar /admin sau /admin/index.php să ofere utilizatorului o pagină de login, iar restul să returneze eroare.
NetConstructor.com
Poți încerca să plasezi fișierul lângă functions.php și să-l incluzi în partea de sus a functions.php. Dar s-ar putea să nu funcționeze pentru că ar putea fi deja prea târziu pentru a reconfigura cookie-urile. Așa că ești avertizat :)
hakre
Pentru problema cu eroarea 404, te rugăm să întrebi pe serverfault cum poți face această configurare pe serverul tău web.
hakre
Unde exact ar trebui să pun linia "RewriteRule ^admin/(.*)$ /wp-admin/$1 [QSA,L]" ???
trusktr
Unde ar trebui să pun codul return apply_filters('admin_url', $url, $path, $blog_id);
User
hakre.... Răspuns excelent... acum cu cea mai recentă versiune de WordPress având un administrator de rețea separat, am folosit soluția ta și am adăugat partea pentru a rescrie corect linkurile "Administrator Rețea" în același mod...
/**
* Schimbă URL-ul Adminului
*
* Copyright (C) 2010 hakre <http://hakre.wordpress.com/>
*
* Acest program este software liber: îl puteți redistribui și/sau modifica
* sub termenii Licenței Publice Generale Affero GNU, așa cum este publicată
* de Free Software Foundation, fie versiunea 3 a Licenței, fie
* (la alegerea dumneavoastră) orice versiune ulterioară.
*
* Acest program este distribuit în speranța că va fi util,
* dar FĂRĂ NICI O GARANȚIE; fără nici măcar garanția implicită a
* COMERCIABILITĂȚII sau ADECVĂRII LA UN SCOP PARTICULAR. Consultați
* Licența Publică Generală Affero GNU pentru mai multe detalii.
*
* Ar trebui să fi primit o copie a Licenței Publice Generale Affero GNU
* împreună cu acest program. Dacă nu, vedeți <http://www.gnu.org/licenses/>.
*
* UTILIZARE:
*
* Copiați fișierul în directorul wp-content/mu-plugins și adăugați
* următoarea regulă RewriteRule în configurația Apache sau .htaccess:
*
* RewriteRule ^admin/(.*)$ wp-admin/$1 [QSA,L]
*
* Aceasta va rescrie URL-ul de administrare WordPress
*
* de la: http://example.com/wp-admin/ ...
* la : 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 - filtru pentru inserare în .htacces la activarea pluginului
*
*/
/** Versiune actualizată de 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);//Adăugat de 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;
}
// Adăugat de 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;
}
}
ai întâmpinat vreo problemă sau eroare cu acest cod? Am observat că paginile se încarcă mai încet în zona de administrare și unele plugin-uri funcționau puțin ciudat...
NetConstructor.com
Bună! Tocmai am găsit acest post în căutarea unei soluții pentru a înlocui 'wp-'. Poate cineva să-mi spună dacă există vreo problemă în utilizarea acestui cod așa cum a menționat @Netcontrucor.com?
Mulțumesc!
user391
Se pare că codul tău nu funcționează dacă WordPress este instalat pe un subdomeniu, deoarece pare să încerce să redirecționeze către domeniul principal. Poți confirma acest lucru și, dacă da, te rog să actualizezi codul? Mulțumesc, CH
NetConstructor.com
Te rog să adaugi URL-urile subdomeniilor etc., altfel este greu de spus // Îmi pot imagina că cookie-urile nu funcționează corect pentru schimbarea domeniilor cu codul actual.
hakre
Hei, unde exact trebuie să pun RewriteRule în interiorul fișierului htaccess în relație cu celelalte reguli WordPress?... Contează locul?
trusktr
Poți adăuga liniile symlink .htaccess în răspuns pentru referință? Poate ai ceva de genul care necesită adăugarea liniei -l: http://stackoverflow.com/questions/5412955/htaccess-config-with-symbolic-links-and-index-files-not-working-as-expected ?
majick
Pe lângă soluțiile anterioare. Am găsit fișierele lipsă de css și script.
Remedierea este
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# fișiere încărcate
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]
# adaugă o bară oblică la final pentru /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
# Remediere folosind răspunsul 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]
#Remediere pentru încărcarea fișierelor css, js și imagini pentru URL-uri de administrare multi-site.
#cod vechi 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]