Come posso far modificare a WordPress un file .htaccess in un certo modo?
Ho imparato giusto un po' della WordPress Rewrite API — abbastanza per aggiungere un'altra regola di riscrittura per un plugin. Il plugin funziona se installato nella root, ma sto scoprendo che se WordPress è installato in una sottocartella, allora devo apportare le seguenti modifiche al file .htaccess. Vorrei sapere come automatizzare queste modifiche se possibile. Inoltre, c'è un secondo problema. Se si va nelle Impostazioni dei Permalink in WordPress, le mie modifiche personalizzate vengono sovrascritte (tranne la mia regola speciale che utilizza la WP Rewrite API). Quindi, ho bisogno di qualcosa che utilizzi la WordPress Rewrite API in modo che non vengano sovrascritte.
File .htaccess originale
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /mysubdir/
RewriteRule ^index\.php$ - [L]
# mia riga speciale con 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>
# END WordPress
Modifiche apportate per far funzionare il plugin in una sottocartella
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
#RewriteBase /mysubdir/
RewriteRule ^index\.php$ - [L]
# mia riga speciale con 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>
# END WordPress

Se non vuoi che WordPress sovrascriva le tue modifiche nel file .htaccess, assicurati di scrivere le tue modifiche al di fuori del blocco di commenti di WordPress, cioè prima o dopo questo:
# BEGIN WordPress
...
# END WordPress
Considera questa area come il territorio di WordPress. Qualsiasi cosa all'interno di questo blocco verrà sovrascritta da WordPress quando dovrà apportare modifiche a .htaccess.
Questo è ciò che puoi fare dopo il blocco di commenti di WordPress:
# BEGIN WordPress
...
# END WordPress
<IfModule mod_rewrite.c>
# Scrivi qui le tue regole di riscrittura.
</IfModule>

Puoi utilizzare add_rewrite_rule() per aggiungere regole al file .htaccess
. Se aggiungi queste regole durante l'azione init
(o appena prima che le regole vengano aggiornate), ogni volta che le regole vengono aggiornate (ad esempio quando vengono salvate le impostazioni dei permalink), tali regole verranno mantenute.
Nota, tipicamente una riscrittura passata a add_query_arg
ha la forma:
'index.php?p=12&food=$matches[1]&variety=$matches[2]'
e WordPress la gestisce internamente senza aggiungerla al file .htaccess
. Ma se la prima parte non è index.php?
allora viene trattata come una regola di riscrittura esterna e aggiunta al file .htaccess
. Vedi sorgente.
