La configurazione di default del CMS WordPress prevede un sistema di riscrittura degli indirizzi basato sul file “.htaccess” (scritto con il punto iniziale). Vediamo come renderlo meno intrusivo e massimizzarne le prestazioni.
La seguente configurazione di “.htaccess” viene utilizzata nelle recenti versioni di WordPress (fino alla 3.x):
# BEGIN WordPress
<IfModule mod_rewrite.c><br />
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Questa serie di regole è molto inefficente. Infatti, al caricamento di ogni file che compone la pagina web, esegue un ciclo di ricerca supplementare per verificare l’esistenza del file.
Il problema si complica, inoltre, nel caso in cui il proprio servizio di hosting preveda limitazioni di banda. Se tali limitazioni relative al numero di file caricati (mod_slotlimit), come ad esempio nel caso del provider italiano Tophost, si ottiene l’effetto di fare scattare il limite di soglia anche caricando una sola pagina web, in quanto tutti i suoi componenti (immagini, fogli di stile) vengono fatti passare attraverso l’interprete php e quindi trattati come fossero pagine web indipendenti. In breve, tutto questo porta al fatidico messaggio di errore:
Blocked by mod_slotlimit. More information about this error may be available in the server error log.
Suggeriamo quindi di sostituire il contenuto del file “.htaccess” con le righe seguenti:
# BEGIN WordPress RewriteEngine On RewriteBase / # if this request is for "/" or has already been rewritten to WP RewriteCond $1 ^(index\.php)?$ [OR] # or if request is for image, css, or js file RewriteCond $1 \.(gif|jpe?g|png|css|js|ico)$ [NC,OR] # or if URL resolves to existing file RewriteCond %{REQUEST_FILENAME} -f [OR] # or if URL resolves to existing directory RewriteCond %{REQUEST_FILENAME} -d # then skip the rewrite to WP RewriteRule ^(.*)$ - [S=1] # else rewrite the request to WP RewriteRule . /index.php [L] # END WordPress
I miglioramenti apportati sono i seguenti:
- il blocco di controllo <ifmodule> è rimosso per guadagnare velocità
- la riscrittura viene evitata se la pagina da caricare è la “index.php”, cioè la pagina iniziale
- la riscrittura viene evitata per i file statici di tipo immagine, javascript e css
Utilizzando le nuove regole si abbasserà notevolmente il tempo di caricamento della pagina, considerando che saranno evitati numerosi cicli di ricerca relativi al check di esistenza dei file statici, e si risolveranno gli eventuali problemi nel controllo di banda tramite mod_slotlimit.
grazie per le regole, ma queste modifiche effettuano anche un redirect su NON WWW ma senza 301 non sarebbe opportuno aggiungere anche
RewriteCond %{HTTP_HOST} ^www.dominio.net [NC]
RewriteRule ^(.*)$ http://dominio.net/$1 [L,R=301]
tu che ne pensi?
Ciao Stefano,
credo non sia necessario aggiungere il 301 in questo caso, a meno che tu non voglia forzare l’utilizzo dei link senza www; in quel caso dai un’occhiata anche ai link canonici inseriti nel tema per evitare contraddizioni. In ogni caso è una scelta individuale, non una regola generale.
ciao,
si non è una regola generale,
io di solito forzavo con 301 www o non www
mi chiedevo cosa ne pensavi anche per le prestazioni e lato seo dato che redirige lo stesso senza come lo voglio è penso rediriga anche i motori
e si, canonical è impostato senza
Buongiorno,
tempo fa cambiai la struttura dei permalink da http://www.nomesito.com/%category%/%postname%.html a http://www.nomesito.com/%postname%/, ora google strumenti webmaster mi restituisce migliaia di link, con errore 404, c’è un modo per “programmare” il redirect affinchè redirecti correttamente, e in automatico, tutti i link su google? Non voglio usare plugin perchè finora hanno fatto solo macelli (e credo anche di esser stato penalizzato). Grazie mille.
Purtroppo ho commesso diversi errori in passato, nel tentativo di spostare il sito nella root principale, commisi degli errori, poi con i permalink ecc.ecc. adesso cerco di risolvere queste segnalazioni di strumenti per webmaster.
Grato infinitamente per un aiuto.
Grazie
Antonio
Ciao Antonio,
in linea di massima aggiungerei al file htaccess una serie di regole di questo tipo, una per categoria:
RewriteRule ^nomedellacategoria/(.+)\.html$ http://www.nomesito.com/$1/ [R=301,L]
Immagino sia necessario qualche ulteriore adattamento, ma può essere un punto di partenza.
ciao
io ho questo problema:
nella root del sito ho installato wordpress in una directory ho installato un negozio basato su prestashop.
Il problema è che alcune pagine nella cartella di prestashop vengono dirottate alla 404 di worpress.
ho provato a modificare htaccess di wordpress con alcuni esempi trovati nel web ma la cosa continua.
come posso risolvere?
grazie
Ciao Roberto, se WordPress risponde al posto di Prestashop dovresti cercare la soluzione all’interno di Prestashop, che non processa correttamente la richiesta. Dai un’occhiata alla sua gestione 404, al suo htaccess e, nel caso in cui l’htaccess sia unico, all’ordine in cui sono inserite le regole di Prestashop e WordPress.