Metodi di pagamento Abuse

Abilitare il Mod Rewrite di Apache

06.03.2022, 00:06

Quando un utente inserisce un URL specifico in un browser e preme Invio, il server Web che riceve la richiesta cerca di trovare un file sul server nel percorso specificato nell'URL. Se non viene trovato nulla lungo il percorso, viene aperto un file di indice come index.html o index.php. se non viene trovato nulla, viene restituito un errore 404. Non avremmo URL belli e facili da capire se le cose non funzionassero nel modo in cui funzionano ora. Questi URL sono utilizzati in molti siti. Il modulo apache mod rewrite è stato progettato per risolvere questo problema In questa guida vedremo come abilitarlo.

Abilitazione del modulo

Se tutto funzionasse come descritto, quando si apre un qualsiasi link di questo sito nella directory principale dovrebbe esistere un file o uno script con lo stesso nome nella barra degli indirizzi. Ma non è così. Quando si richiede questo URL, il server web tenta di trovare tale file, ma se non lo trova, invece di restituire un errore 404, passa il controllo al modulo mod_rewrite, che per tutti gli URL di questo tipo esegue lo script index.php, passandogli la query string dopo il dominio. PHP utilizza quindi questi dati per trovare e restituire la pagina di cui l'utente ha bisogno.

Per abilitare il mod rewrite si deve eseguire un semplice comando:

$ sudo a2enmod rewrite

Dopo aver riavviato il server web:

$ sudo systemctl restart apache

Il fatto che il modulo sia abilitato a livello di server web Apache non significa che funzionerà per un sito web. A tale scopo, deve essere configurato nel file .htaccess, specificando su quale script passare le richieste a pagine inesistenti. Affinché il file .htaccess funzioni, la direttiva AllowOwerride: All deve essere aggiunta alla sezione Directory dell'host virtuale.

A titolo di esempio:

Quindi, ad esempio, in WordPress è necessario aggiungere righe come questa al file .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Tutto il codice è inserito nella direttiva IfModule, che consente l'esecuzione del codice al suo interno solo quando il modulo mod_rewrite è abilitato, altrimenti queste righe vengono semplicemente ignorate. La direttiva RewriteEngine On abilita il modulo per la directory corrente. Poi RewriteBase specifica che l'intera stringa dopo il dominio deve essere passata allo script. Seguono le regole RwriteRule con le relative condizioni RewriteCond, che vengono eseguite in modo strettamente sequenziale.

Una delle regole RewriteRule ^index .php$ - [L] dice che se l'URL contiene index.php, l'URL deve essere riscritto a /. In questa espressione regolare, viene specificata l'intera stringa e il punto viene evaso con una barra rovesciata. Il flag [L] significa che se l'URL corrisponde a questa regola, le regole successive non devono essere controllate. Dopo l'esecuzione di questa regola, l'URL verrà riscritto e il server web assumerà di aver ricevuto la richiesta /, l'analisi delle regole ricomincerà e questa volta corrisponderà all'ultima regola.

Le condizioni di RewriteCond si applicano a tutte le regole successive. Così abbiamo RewriteCond %{REQUEST_FILENAME} !-f e RewriteCond %{REQUEST_FILENAME} !-d che permettono all'ultima regola di essere eseguita solo se l'URL non è un file o una cartella. La regola finale reindirizza tutto allo script ./index.php.

Se non si riesce a capire le impostazioni di mod_rewrite, vale la pena di vedere cosa succede all'interno del server web durante i reindirizzamenti. Per fare ciò, nella configurazione dell'host virtuale del sito, è necessario aggiungere questa riga.

Ad esempio:

$ sudo vi /etc/apache2/sites-available/001-texts.conf

LogLevel warn rewrite:trace4

Nel file di log, indicato nella direttiva ErrorLog, si vedranno tutti i tentativi del server web di convertire l'URL secondo le proprie regole e si potrà capire cosa si sta sbagliando. In questo tutorial abbiamo spiegato come abilitare il mod rewrite di Apache, come funziona e come cercare gli errori.