Come faccio a utilizzare .htaccess per il reindirizzamento a un URL contenente HTTP_HOST?

StackOverflow https://stackoverflow.com/questions/72458

Domanda

Problema

Ho bisogno di reindirizzare alcune brevi convenienza Url di più Url.Il sito in questione utilizza un set di sottodomini per identificare un insieme di sviluppo o versioni live.

Vorrei che la URL per il quale alcune richieste vengono reindirizzati a includere il HTTP_HOST tale che non devo creare un custom .il file htaccess per ogni host.

Host-Esempio specifico (tagliato da .il file htaccess)

Redirect /terms http://support.dev01.example.com/articles/terms/

Questo esempio funziona bene per la versione di sviluppo in esecuzione dev01.example.com.Se io uso la stessa linea principale .il file htaccess per la versione di sviluppo di esecuzione in dev02.example.com finisco per essere reindirizzato al posto sbagliato.

Ideale regola (non sono sicuro della sintassi corretta)

Redirect /terms http://support.{HTTP_HOST}/articles/terms/

Questa regola non funziona e serve unicamente come un esempio di ciò che vorrei realizzare.Quindi potrei usare la stessa regola, in diversi host e ottenere il risultato corretto.

Risposte?

  • Questo può essere fatto con mod_alias o richiede più complesso mod_rewrite?
  • Come può essere ottenuto utilizzando mod_alias o mod_rewrite?Io preferirei un mod_alias soluzione, se possibile.

Chiarimenti

Non sto rimanendo sullo stesso server.Vorrei:

Mi piacerebbe essere in grado di utilizzare la stessa regola .il file htaccess su entrambi example.com e dev.example.com.In questa situazione, avrei bisogno di essere in grado di vedere il HTTP_HOST come una variabile piuttosto che specificare letteralmente l'URL a cui le richieste vengono reindirizzate.

Io indagare il HTTP_HOST parametro come suggerito ma speravo in un esempio funzionante.

È stato utile?

Soluzione

E ' strano che nessuno abbia fatto l'attuale di lavoro risposta (lol):

RewriteCond %{HTTP_HOST} support\.(([^\.]+))\.example\.com
RewriteRule ^/terms http://support.%1/article/terms [NC,QSA,R]

Per aiutare a fare il lavoro più velocemente, il mio strumento preferito per verificare la regexp:

http://www.quanetic.com/Regex (non dimenticare di scegliere ereg(POSIX) invece di preg(PCRE)!)

È possibile utilizzare questo strumento quando si desidera controllare l'URL e vedere se sono validi o meno.

Altri suggerimenti

Penso che si desidera catturare il HTTP_HOST valore e quindi di utilizzare la regola di riscrittura:

RewriteCond %{HTTP_HOST} (.*)
RewriteRule ^/terms http://support.%1/article/terms [NC,R=302]

Se ho capito la tua domanda giusta, si desidera un redirect 301 (indicare browser per passare a un altro URL).Se la mia soluzione non è quella giusta per voi, provare questo strumento: http://www.htaccessredirect.net/index.php e capire che cosa funziona per voi.

//301 Redirect Entire Directory
RedirectMatch 301 /terms(.*) /articles/terms/$1

//Change default directory page
DirectoryIndex 

Secondo questo sheets ( http://www.addedbytes.com/download/mod_rewrite-cheat-sheet-v2/png/ ) dovrebbe funzionare

RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain2.com/$1

Nota che non ho modo di testare questo modo questo dovrebbe essere preso come un puntatore nella giusta direzione opposta ad una risposta esplicita.

Se si sta rimanendo sullo stesso server quindi mettere questo nel vostro .htaccess funzionerà indipendentemente dal server:

RedirectMatch 301 ^/terms$ /articles/terms/

Produce:

http://example.com/terms -> http://example.com/articles/terms

o:

http://test.example.com/terms -> http://test.example.com/articles/terms

Ovviamente è necessario regolare la REGEX di corrispondenza e simili, per assicurarsi che affronta con quello che si sta per buttare a questo.Lo stesso vale per il 301, si potrebbe desiderare un 302, se non vuoi browser per memorizzare nella cache il redirect.

Se si desidera:

http://example.com/terms -> http://server02.example.com/articles/terms

Poi devi utilizzare la HTTP_HOST parametro.

Non è necessario includere queste informazioni.Basta fornire un URI relativo alla radice.

Redirect temp /terms /articles/terms/

Questo è spiegato in la documentazione mod_alias:

Il nuovo URL deve essere un URL assoluto inizio con un regime e l'hostname, ma un percorso-URL che inizia con una barra può anche essere utilizzato, in questo caso il regime e il nome host del server corrente verrà aggiunto.

Suona come quello che si ha realmente bisogno è solo un alias?

Alias /terms /www/public/articles/terms/
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top