Le regole di riscrittura non funzionano in WordPress
Sto cercando di aggiungere nuove regole di riscrittura utilizzando l'API di riscrittura:
// Aggiungi regola per prodotti con ASIN
add_rewrite_rule('product/([A-Z0-9]{10})', 'index.php/product/?asin=$1', 'bottom');
// Aggiungi regola per prodotti generici
add_rewrite_rule('product/(([A-Za-z0-9_])*)', 'index.php/product/?product=$1', 'bottom');
// Aggiungi regola per confronto prodotti
add_rewrite_rule('compare/((([A-Z0-9]{10}),?)*)', 'index.php/compare/?asin=$1', 'bottom');
// Aggiungi regola per categorie
add_rewrite_rule('categories/(([A-Za-z0-9]|\-|\_)*)', 'index.php/categories/?subcategory=$1', 'bottom');
Dopo l'aggiornamento dei permalink, vengono aggiunte le seguenti righe al file .htaccess
:
RewriteRule ^product/([A-Z0-9]{10}) /index.php/product/?asin=$1 [QSA,L]
RewriteRule ^product/(([A-Za-z0-9_])*) /index.php/product/?product=$1 [QSA,L]
RewriteRule ^compare/((([A-Z0-9]{10}),?)*) /index.php/compare/?asin=$1 [QSA,L]
RewriteRule ^categories/(([A-Za-z0-9]|\-|\_)*) /index.php/categories/?subcategory=$1 [QSA,L]
Risultando nel seguente file .htaccess
completo:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteRule ^product/([A-Z0-9]{10}) /index.php/product/?asin=$1 [QSA,L]
RewriteRule ^product/(([A-Za-z0-9_])*) /index.php/product/?product=$1 [QSA,L]
RewriteRule ^compare/((([A-Z0-9]{10}),?)*) /index.php/compare/?asin=$1 [QSA,L]
RewriteRule ^categories/(([A-Za-z0-9]|\-|\_)*) /index.php/categories/?subcategory=$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Ma quando provo ad accedere al seguente URL:
http://example.com/product/ABCDE324AB
Non sembra funzionare. Ricevo sempre una pagina "non trovata". Qualche idea?

Da quanto ho capito sopra, hai il file .htaccess e anche il codice corretto scritto nello stesso file, ma continui a ricevere l'errore 404. Lasciami spiegare il perché. Il tuo server non sta permettendo la lettura o l'override delle autorizzazioni del file .htaccess. Quindi, come puoi concedere questa autorizzazione? Apri il tuo file Apache httpd.conf, cerca "AllowOverride" e vedrai che è presente più volte. Cerca il seguente commento nello stesso file:
# AllowOverride controlla quali direttive possono essere inserite nei file .htaccess.
# Può essere "All", "None" o qualsiasi combinazione delle seguenti parole chiave:
# Options FileInfo AuthConfig Limit
#
AllowOverride None
Sostituisci semplicemente AllowOverride None
con AllowOverride All
Ora riavvia APACHE
e dovrebbe funzionare

Questo può anche aiutarti: http://httpd.apache.org/docs/current/mod/core.html#allowoverride

Sembra che l'override stia effettivamente funzionando perché quando ho fatto riferimento a un file esterno a WordPress è riuscito a seguire le regole di riscrittura. Semplicemente non capisco perché non funzioni con le pagine di WordPress.

Ok, prova a fare una cosa. Fai un backup del tuo file htaccess e rimuovi tutto il codice, poi aggiungi il codice htaccess predefinito a questo file. Quindi vai alla pagina dei permalink e seleziona il permalink predefinito. Dopodiché accedi al sito, sono sicuro che funzionerà. Poi prova con altre impostazioni di permalink.

Vuoi dire che non riesci ad accedere al sito con il permalink predefinito?

il permalink predefinito funziona quando inserisco qualcosa come site.com?page_id=7 ma le regole di riscrittura personalizzate che ho aggiunto ancora non funzionano. Non funzionerà davvero se uso solo il permalink predefinito, ma se uso il permalink con il nome del post non funziona neanche quello
