Pregunta

Problema

Necesito redireccionar algunos cortos conveniencia Url más larga de la Url.El sitio en cuestión utiliza un conjunto de subdominios para identificar un conjunto de desarrollo o versiones en vivo.

Me gustaría que la URL a la que ciertas peticiones se le redirige a incluir la HTTP_HOST tal de que no tengo que crear una personalizada .htaccess para cada host.

Host específico de Ejemplo (cortada de .htaccess)

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

Este ejemplo funciona bien para la versión de desarrollo en ejecución en dev01.example.com.Si yo uso la misma línea en la principal .htaccess para el desarrollo de la versión que se ejecuta bajo dev02.example.com me gustaría terminar siendo redirigido al lugar equivocado.

Ideal regla (no estoy seguro de la sintaxis correcta)

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

Esta regla no funciona y sirve únicamente como un ejemplo de lo que me gustaría conseguir.Entonces yo podría utilizar la misma regla de bajo diferentes hosts y obtener el resultado correcto.

Las respuestas?

  • Se puede hacer esto con mod_alias o se requiere el más complejo mod_rewrite?
  • Cómo se consigue esto mediante mod_alias o mod_rewrite?Prefiero un mod_alias solución si es posible.

Aclaraciones

No me voy a quedar en el mismo servidor.Me gustaría:

Me gustaría ser capaz de utilizar la misma regla en el .htaccess en ambos example.com y dev.example.com.En esta situación yo tendría que ser capaz de referirse a la HTTP_HOST como una variable, en lugar de especificar literalmente en la dirección URL a la que redirigir solicitudes.

Voy a investigar el HTTP_HOST parámetro, como se sugirió, pero estaba esperando un ejemplo de trabajo.

¿Fue útil?

Solución

Es extraño que nadie lo ha hecho el real de trabajo respuesta (lol):

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

Para ayudarle a hacer el trabajo más rápido, mi herramienta favorita para comprobar regexp:

http://www.quanetic.com/Regex (no olvides elegir ereg(POSIX) en lugar de preg(PCRE)!)

Utilice esta herramienta cuando desee comprobar la URL y ver si son válidos o no.

Otros consejos

Creo que usted lo desea capturar la HTTP_HOST valor y, a continuación, utilizar la regla de reescritura:

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

Si entiendo tu pregunta, quieres una redirección 301 (le dicen el navegador para ir a otra dirección URL).Si mi solución no es la correcta para usted, trate de esta herramienta: http://www.htaccessredirect.net/index.php y averiguar lo que funciona para usted.

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

//Change default directory page
DirectoryIndex 

De acuerdo a este cheatsheet ( http://www.addedbytes.com/download/mod_rewrite-cheat-sheet-v2/png/ ) esto debería funcionar

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

Tenga en cuenta que no tengo manera de probar esto por lo que este debe ser tomado como un puntero en la dirección correcta, en contraposición a una respuesta explícita.

Si usted se hospeda en el mismo servidor, a continuación, poner esto en tu .htaccess funcionará independientemente del servidor:

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

Obviamente tendrás que ajustar la coincidencia de EXPRESIÓN regular para asegurarse de que se arregla con lo que se va a lanzar en él.Lo mismo va para el 301, usted puede ser que desee un 302 si no desea que los navegadores caché de la redirección.

Si usted desea:

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

Entonces usted tendrá que utilizar las HTTP_HOST parámetro.

No es necesario incluir esta información.Acaba de proporcionar un URI relativo a la raíz.

Redirect temp /terms /articles/terms/

Esto se explica en el mod_alias documentación:

La nueva dirección URL debe ser una URL absoluta que comienzan con un esquema y el nombre del host, pero una URL camino comienza con una barra también puede ser utilizado, en cuyo caso el esquema y el nombre de host del servidor actual será añadido.

Suena como lo que realmente necesita es un alias?

Alias /terms /www/public/articles/terms/
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top