Cum să modific fișierul .htaccess într-un anumit mod în WordPress?

27 nov. 2012, 13:19:10
Vizualizări: 425
Voturi: 0

Am învățat puțin despre WordPress Rewrite API – suficient cât să adaug o regulă de rescriere pentru un plugin. Pluginul funcționează dacă este instalat în rădăcină, dar am observat că dacă WordPress este instalat într-un subdirector, trebuie să fac următoarele modificări în fișierul .htaccess. Aș dori să știu cum să automatizez aceste modificări, dacă este posibil. De asemenea, există o a doua problemă. Dacă mergi la Setările Permalinks în WordPress, modificările mele personalizate sunt suprascrise (cu excepția regulii mele speciale care folosește WP Rewrite API). Așadar, am nevoie de ceva care să folosească WordPress Rewrite API, astfel încât să nu fie suprascrise.

Fișier .htaccess original

# ÎNCEPUT WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /mysubdir/
RewriteRule ^index\.php$ - [L]
# linia mea specială WP Rewrite API
RewriteRule ^special(.*)$ /mysubdir/wp-content/plugins/special/app/$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /mysubdir/index.php [L]
</IfModule>
# SFÂRȘIT WordPress

Modificările pe care le-am făcut pentru ca pluginul să funcționeze într-un subdirector

# ÎNCEPUT WordPress
<IfModule mod_rewrite.c>
RewriteEngine On

#RewriteBase /mysubdir/

RewriteRule ^index\.php$ - [L]
# linia mea specială WP Rewrite API
RewriteRule ^special(.*)$ /mysubdir/wp-content/plugins/special/app/$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

#RewriteRule . /mysubdir/index.php [L]

RewriteRule . index.php [L]
</IfModule>
# SFÂRȘIT WordPress
2
Comentarii

Regulile de rescriere ar trebui să funcționeze corect indiferent de locul în care este instalat site-ul (în subdirector sau nu). Cum ai adăugat rescrierea ta? Se pare că întrebarea ta ar trebui să fie "De ce nu funcționează rescrierea mea personalizată cu WordPress într-un subdirector?"

chrisguitarguy chrisguitarguy
27 nov. 2012 14:03:24

@chrisguitarguy Implementez conținut securizat în plugin-ul meu. Interceptez /my-post (pentru că a fost marcat în plugin-ul meu ca securizat) și redirecționez către /special/secured/my-post (nu o cale fizică, ci una logică de rescriere), unde plugin-ul meu interceptează și afișează conținutul doar membrilor autentificați.

Volomike Volomike
28 nov. 2012 00:03:11
Toate răspunsurile la întrebare 2
0

Dacă nu dorești ca WordPress să suprascrie modificările tale în fișierul .htaccess, asigură-te că scrii modificările în afara blocului de comentarii WordPress, adică fie înainte, fie după acest marcaj:

# BEGIN WordPress
...
# END WordPress

Consideră această zonă ca fiind teritoriul WordPress. Orice se află în acest bloc va fi suprascris de WordPress atunci când trebuie să facă modificări în .htaccess.

Iată ce poți face după blocul de comentarii WordPress:

# BEGIN WordPress
...
# END WordPress

<IfModule mod_rewrite.c>
# Scrie aici regulile tale de rescriere.
</IfModule>
27 nov. 2012 14:00:40
0

Puteți folosi add_rewrite_rule() pentru a adăuga reguli în fișierul .htaccess. Dacă adăugați aceste reguli pe init (sau chiar înainte ca regulile să fie resetate), atunci de fiecare dată când regulile sunt resetate (adică când setările de legături permanente sunt salvate), acele reguli vor fi păstrate.

Rețineți, de obicei o rescriere transmisă la add_query_arg este de forma:

'index.php?p=12&food=$matches[1]&variety=$matches[2]'

iar WordPress o gestionează intern și nu le adaugă în fișierul .htaccess. Dar dacă prima parte nu este index.php?, atunci este tratată ca o regulă de rescriere externă și adăugată în .htaccess. Vezi sursa.

27 nov. 2012 14:24:03