Htaccess redirect a un localhost su una determinata porta via apache2 mod_rewrite.

Questo snippet di htaccess configura una regola di rewrite per il modulo mod_rewrite di Apache.

<IfModule mod_rewrite.c>
    RewriteEngine On
    #Domain REDIRECT
    RewriteCond %{HTTP_HOST} !^127\.0\.0\.1:3000$ [NC]
    RewriteRule ^(.*)$ http://127.0.0.1:3000/$1 [L,R=301]
</IfModule>

In pratica, se il modulo mod_rewrite è attivo (verificato con l’istruzione <IfModule mod_rewrite.c>), la regola specifica RewriteEngine On abilita il rewriting degli URL.

La successiva istruzione RewriteCond verifica se l’host nella richiesta HTTP non corrisponde a “127.0.0.1:3000” (cioè non sta puntando al server locale sulla porta 3000). Se la condizione è vera, viene applicata la regola di rewrite successiva.

La regola di rewrite RewriteRule prende tutto ciò che segue il dominio nella richiesta e lo redirige verso “http://127.0.0.1:3000/$1“, dove “$1” rappresenta il valore catturato tra parentesi nella parte corrispondente dell’URL richiesto. L’opzione [L,R=301] indica che si tratta di una redirezione permanente (codice HTTP 301) e che non devono essere processate ulteriori regole di rewriting.

In sintesi, questo snippet di htaccess redirige tutte le richieste in arrivo a un server locale sulla porta 3000, a meno che non siano già indirizzate a tale indirizzo.

Tieni presente che la correttezza dell’implementazione dipende dalle tue esigenze specifiche e dall’ambiente di hosting in cui viene utilizzato. È consigliabile testare attentamente il funzionamento dell’htaccess e adattarlo alle tue necessità.

Default domain con .htaccess

Se si dispone di più di un dominio che puntano allo stesso spazio web è possibile scegliere un default domain con .htaccess.

Lo scenario

Abbiamo più siti che puntano al medesimo spazio web, ad esempio:

miosito.it
miosito.com
miosito.net

puntano tutti alla stessa cartella nel medesimo webserver (per esempio /public_html/).

Abbiamo bisogno che qualunque dominio raggiunga l’internauta debba essere rediretto a miosito.it.

La soluzione

Aggiungere queste righe al proprio file .htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    #MULTIDOMAIN REDIRECT
    RewriteCond %{HTTP_HOST} !^www\.miosito\.it$ [NC]
    RewriteRule ^(.*)$ http://www.miosito.it/$1 [L,R=301]
</IfModule>

Quello che abbiamo fatto è dire al server: “Se ti arriva una richiesta con il nome dominio diverso da miosito.it, gira tutto su miosito.it.

Spero di essere stato utile.

Redirect di immagini via .htaccess

Questo articolo spiega come eseguire un redirect di un’immagine attraverso il file .htaccess.

Sarà capitato a tutti gli sviluppatori web di avere un ambiente di test e un ambiente di produzione, rispettivamente dove vengono testate le modifiche e dove esse prendono corpo.

Una delle questioni più annose quando si usano due o più ambienti per lo sviluppo di un progetto, è la sincronia dei dati in essi presenti per finalità di testing o di sviluppo.

Un tipico caso è quello di un ambiente di test (o anche di sviluppo) che non contiene tutti gli articoli, i prodotti, le pagine che in produzione, a seguito di un lavoro certosino, sono state create da una redazione e sebbene sia a volte sufficiente portare tutto il database dalla produzione all’ambiente di test per ottenere le istanze dei contenuti ivi assenti, questo discorso non può essere fatto per le immagini (ed in generale per i file).

Ma vi immaginate a trasferire centinaia (a volte migliaia) di immagini da un server all’altro? Una follia …

Allora si potrebbero sempre cambiare i path delle immagini referenziate mediante il DB, ma non è mai bello dover smanettare nel database specie se è di dimensioni abnormi e specie se questa operazione va ripetuta nel tempo.

Per questa ragione ci viene incontro il file .htaccess che ci consente di redirigere tutto quello che non viene reperito sull’ambiente locale ad un altro ambiente remoto (accessibile ovviamente).

Con queste poche righe mostro un esempio:

<IfModule mod_rewrite.c>
  RewriteEngine on
  #get remote image
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png)$
  RewriteRule ^(.*)$  http://www.MIOSITO.it/$1 [L]
</IfModule>

L’esempio illustrato è stato testato con ambienti in cui è montato Drupal.

Ovviamente è necessario che tale codice sia presente sul solo ambiente di test per evitare sorprese sgradite.