2009-02-15 15 views
6

Necesito reescribir el "Nombre de host" {HTTP_HOST} para una solicitud entrante. ¿Es posible hacer esto usando el Módulo de Reescritura de IIS 7?
Quiero volver a escribir http://abc.xyz.com/ * a http://xyz.com/sites/abc/ *. Esto se está haciendo para un sitio de SharePoint que usa el {HTTP_HOST} internamente.Reescritura de URL con IIS 6/7 - Reescribiendo nombre de host {HTTP_HOST}

¿Hay alguna Reescritura de Url por ahí que me permita cambiar la variable {HTTP_HOST} de IIS?

Saludos cordiales,

Respuesta

2

no estoy familiarizado con el IIS 7 Módulo de reescritura, pero ISAPI_Rewrite pueden cambiar casi cualquier cabecera HTTP que desea. Hay una versión gratuita que es suficiente para nuestro sitio y puede ser suficiente para el tuyo.

+0

No quiero hacer una redirección. En su lugar, quiero cambiar el {HTTP_HOST} para la solicitud actual. –

+0

ISAPI_Rewrite puede hacer exactamente eso: puede cambiar el encabezado HTTP "Host:" para la solicitud actual, del mismo modo que cuando "reescribe" una URL no envía una redirección al cliente. – EMP

1

Si quiere evitar una redirección (según su comentario a Evgeny), la única otra opción es un servidor.transferencia. Con server.transfer el procesamiento se envía a una página diferente en el servidor y el cliente no tiene idea (no hay vuelta atrás entre las páginas del cliente).

Aparte de server.transfer las redirecciones reales son bastante típicas ISAPI_Rewrite es una herramienta popular y funciona muy bien como lo mencionó Evgeny.

0

ACTUALIZACIÓN: Esto hará una redirección, no restablecerá la variable. No voy a eliminar esta respuesta como creo que es ordenada pero no responder exactamente lo que quiere

hago esto de una manera muy simple para Economist.com

Tiene dos sitios de IIS para un sitio , comparten el mismo webroot. El sitio web principal de IIS se mantiene como está escuchando en el encabezado del host actual, p.

216.35.68.215 economist.com 

y el otro sitio de IIS escucha en la dirección IP con los otros encabezados de host ingresados.

es decir

216.35.68.215 economist.co.uk 

El segundo esclavo web en el "Directorio" tiene un conjunto de redirección que corregirá cualquier nombre de host personas llegan a su sitio en

Set "La dirección URL que arriba" y "Una redirección permanente para este recurso" e introduzca su entrada de nombre de host completo de la siguiente manera

http://www.economist.com $ S $ Q

El $ S $ Q mantendrá todas las URL en sus otros nombres de host que ingresen.

dude en probar esta

http://www.economist.co.uk/world/americas/

sólo le empujará a

http://www.economist.com/world/americas/

Esto significa que usted no tiene que correr, al menos por esta razón, la justa costoso módulo de reescritura IIS

3

Sí, es posible utilizar el módulo de reescritura IIS 7.Puede usar la GUI para configurar una redirección en IIS7 por this blog post. También puede usar la línea de comando por this SO answer.
En ambos ejemplos, debe tener una configuración de sitio web separada con su propio directorio de inicio y enlaces a los dominios que desea redirigir. Espero que esto tenga sentido.

+0

Lástima que la página no se encuentra ... – Abel

+0

Parece que se mudó a http://www.trainsignal.com/blog/iis7-url-rewrite-extension-on-windows-server-2008 – notandy

3

IIRF es gratis y le permite volver a escribir encabezados, incluido HTTP_HOST.

Quiero escribir nuevamente http://abc.xyz.com/ * en http://xyz.com/sites/abc/ *. Esto se está haciendo para un sitio de SharePoint que usa el {HTTP_HOST} internamente.

Necesita reescribir tanto el host como la URL. Esto lo hace un poco complicado. En este conjunto de reglas, lo hago en los pasos, y el uso de una nueva cabecera para almacenar el estado entre las etapas de:

# detect whether we're using the abc host 
RewriteCond  %{HTTP_HOST}   ^abc\.xyz\.com$ 
RewriteHeader Host-Needs-Rewrite: ^$     YaHuh 

# rewrite the Host: header to the alt host name if necessary 
RewriteCond  %{HTTP_HOST_NEEDS_REWRITE} ^YaHuh$ 
RewriteCond  %{HTTP_HOST}     ^(?!xyz\.com)(.+)$ 
RewriteHeader Host:   .*   xyz.com 

# rewrite the Url to the appropriate place 
RewriteCond  %{HTTP_HOST_NEEDS_REWRITE} ^YaHuh$ 
RewriteCond  %{HTTP_HOST}     ^xyz\.com$ 
RewriteRule  /(.*)$      /sites/abc/$1  [L] 

Usted podría comodín la parte abc, también. De esta manera:

# detect whether we're using the abc host 
RewriteCond  %{HTTP_HOST}   ^([^.]+)\.xyz\.com$ 
RewriteHeader Host-Needs-Rewrite: ^$      %1 

# rewrite the Host: header to the alt host name if necessary 
RewriteCond  %{HTTP_HOST_NEEDS_REWRITE} ^.+$ 
RewriteCond  %{HTTP_HOST}     ^(?!xyz\.com)(.+)$ 
RewriteHeader Host:   .*   xyz.com 

# rewrite the Url to the appropriate place 
RewriteCond  %{HTTP_HOST_NEEDS_REWRITE} ^(.+)$ 
RewriteCond  %{HTTP_HOST}     ^xyz\.com$ 
RewriteRule  /(.*)$      /sites/%1/$1  [L] 
Cuestiones relacionadas