WordPress: un nuovo .htaccess per migliori prestazioni e rispetto mod_slotlimit

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.

7 thoughts on “WordPress: un nuovo .htaccess per migliori prestazioni e rispetto mod_slotlimit

  1. avatarstefano

    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?

    Reply
    1. avatarWhileTrue Post author

      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.

      Reply
  2. avatarstefano

    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

    Reply
  3. avatarAntonio

    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

    Reply
    1. avatarWhileTrue Post author

      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.

      Reply
  4. avatarroberto

    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

    Reply
    1. avatarWhileTrue Post author

      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.

      Reply

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *