Cum să redirecționezi/rescrii toate cererile /wp-login

14 nov. 2010, 13:56:06
Vizualizări: 44.9K
Voturi: 9

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?

4
Comentarii

posibil duplicat al Pot să redenumesc folderul wp-admin?

Rarst Rarst
14 nov. 2010 14:15:49

@Rarst -- Am văzut acea întrebare dar am considerat că întrebarea mea este mai specifică și ar putea permite cuiva să răspundă la întrebare, deoarece pare că acest lucru ar trebui să fie posibil într-un fel ocolit...

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

Dacă nu înțeleg greșit, întrebarea ta este formulată în mod exact despre schimbarea wp-admin în admin, ceea ce nu este posibil conform răspunsurilor din acea altă întrebare. Dacă vrei să obții altceva, te rog să detaliezi puțin?..

Rarst Rarst
14 nov. 2010 14:40:29

@Rarst -- Ești sigur că nu există o metodă în php, apache sau wordpress pentru a redirecționa toate linkurile din backend care punctează către /wp-admin către un alt director? Știu că prin mod-rewrite se poate crea un folder alias și se poate defini ca tot conținutul pentru acel folder să fie preluat dintr-o altă locație. Prin urmare, am presupus că trebuie să existe o modalitate de a forța wordpress să scrie acele URL-uri în loc de /wp-admin... aceasta este întrebarea la care mă refer. Încă sugerezi rewrite-ul?

NetConstructor.com NetConstructor.com
14 nov. 2010 17:41:42
Toate răspunsurile la întrebare 3
10

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.

15 nov. 2010 00:53:52
Comentarii

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

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

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

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

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

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

Pentru problema cu eroarea 404, te rugăm să întrebi pe serverfault cum poți face această configurare pe serverul tău web.

hakre hakre
24 nov. 2010 22:15:32

Unde exact ar trebui să pun linia "RewriteRule ^admin/(.*)$ /wp-admin/$1 [QSA,L]" ???

trusktr trusktr
17 iun. 2011 09:28:37

Unde ar trebui să pun codul return apply_filters('admin_url', $url, $path, $blog_id);

User User
23 oct. 2011 19:51:05

@santosh: Conectează-te la filtrul din interiorul unui cod (plugin) al tău. Este doar filtrul potrivit, folosit ca orice alt filtru :)

hakre hakre
23 oct. 2011 23:09:29
Arată celelalte 5 comentarii
7

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;
     }
    }
26 ian. 2011 16:18:03
Comentarii

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

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

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

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

Hei, unde exact trebuie să pun RewriteRule în interiorul fișierului htaccess în relație cu celelalte reguli WordPress?... Contează locul?

trusktr trusktr
17 iun. 2011 09:32:57

Apropo... Am folosit și o legătură simbolică de la admin -> wp-admin

gruvii gruvii
9 aug. 2011 20:48:59

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 majick
16 mai 2016 08:18:57
Arată celelalte 2 comentarii
2

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

mersi, ai întâmpinat vreo problemă sau limitare folosind această abordare?

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

Îmi imaginez că orice plugin care nu respectă standardele WordPress nu va funcționa.

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