Apache2 Mod Rewrite

Sorgente guida
Permette di riscrivere le url al volo basandosi su espressioni regolari, variabili di istanza http headers timestams, db lookups ecc.
Questo modulo opera usando tutta la url usando anche httpd.conf e .htaccess files
Tutta questa flessibilità vuol dire anche complessità quindi non si pensi di capire tutto in un giorno.
Vi sono quattro riferimenti di partenza la spiegazione del modulo in generale e poi le parti introduzione ecc

Introduction

Questo serve per introdurre i primi concetti
Per molte attività non è necessaria la complessità del mod_rewrite ma basta il mod_alias.
Prima di cominciare assicurati di configurare il RewriteLog in modo da poter ottenere un quantitativo di informazioni sufficienti per un debug.

Regular Expressions

mod_rewrite usa the Perl Compatible Regular Expression vocabulary. Qui se ne userà un sotto insieme.

Mod_rewrite

RewriteLog Directive

Logga tutte le azioni di rewrite che vengono eseguite se il path del file di destinazione non comincia con una / assume la directory del server root.
Per disabilitare il log non conviene mettere come filename /dev/null perchè rallenta il sistema dato che lui crea il file internamente.. Basta commentare la direttiva o usare il RewriteLogLevel 0!
Il formato del file di log è
Description Example
Remote host IP address 192.168.200.166
Remote login name Will usually be "-"
HTTP user auth name Username, or "-" if no auth
Date and time of request [28/Aug/2009:13:09:09 —0400]
Virtualhost and virtualhost ID [www.example.com/sid#84a650]
Request ID, and whether it's a subrequest [rid#9f0e58/subreq]
Log entry severity level (2)
Text error message forcing proxy-throughput with http://127.0.0.1:8080/index.html

Ecco un esempio di utilizzo

RewriteLog "/usr/local/var/apache/logs/rewrite.log"

Il livello di log si setta con

RewriteLogLevel 3

La scala va da 0 (nessun log) a 9 (max log) usare un livello più alto di 2 solo per debug, più il livello è alto più il server va lento.

Problema con i moduli

Attivando i moduli di proxy pass su apache2 ubuntu server 10.10 lts ho avuto il seguente problema al riavvio del web server

Syntax error on line 1 of /etc/apache2/mods-enabled/proxy_connect.load:
Cannot load /usr/lib/apache2/modules/mod_proxy_connect.so into server:
/usr/lib/apache2/modules/mod_proxy_connect.so: undefined symbol:
ap_proxyerror

Su un forum ho trovato la soluzione lanciando il seguente comando

a2enmod proxy

Modi per fare il redirect

Ci sono due modi o tramite codice in una pagina html /php /ecc oppure utilizzando i moduli di apache. In questa pagina http://www.yolinux.com/TUTORIALS/ApacheRedirect.html ci sono diversi modi per farlo in tutte e due le maniere.
In questa pagina http://www.webmasterworld.com/forum92/82.htm ci sono spiegate i modi per farlo correttamente.

Soluzione sporca e veloce con i codici html o php ecc

<meta http-equiv="Refresh" content="8;URL=http:// www.example.com/somepage.html">

o in maniera equivalente con php ecc.
È una soluzione sconsigliata dai vari motori di ricerca perchè non aggiornano i loro links.

Soluzione pulita con i moduli mod_alias mod_rewrite

In questo modo vengono aggiornati gli spider. Il modulo in questione deve essere abilitato globalmente e l'istruzione è la seguente

RedirectMatch page1\.html page2.html

Oppure con l'attributo opzionale
RedirectMatch permanent page1\.html page2.html

ci sono 4 valori di attributo "permanent", "temp", "seeother", or "gone". Il primo genera una "301 moved permanently" , il secondo genera una "302 moved temporarily" gli altri non sono commentati.

Se si usa un .htaccess file deve esserci

RewriteEngine on

altro esempio di moduli

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^page1\.html$ page2.html [R=301,L]

Prima riga dice di seguire i link simbolici nel file system
Seconda riga cambia l'impostazione di default che è off
Se guardiamo l'espressione regolare "page1\.html" and "^page1\.html$" , "page1\.html" matches qualsiasi stringa "page1.html" (apage1.html for example) invece l'URL, "^page1\.html$" match solo l'esatta stringto "page1.html".
Il significato delle parentisi forza il codice http a 301 al contrario del default che è 302, la L indica di non processare più altre regole se ce ne dovessero essere altri.

Tutto il sito redirect da http a https

<VirtualHost *:80>
        ServerName sitosicuro.com
    RedirectMatch   ^/$  https://sitosicuro.com
</VirtualHost>
Salvo diversa indicazione, il contenuto di questa pagina è sotto licenza Creative Commons Attribution-ShareAlike 3.0 License