Por que essa reescrita do IIS7 está executando um redirecionamento?

2

Eu tenho uma regra de reescrita respondendo com um redirecionamento 301, mas não sei por quê.

Estou na hospedagem compartilhada do WinHost, usando a reconfiguração do IIS 7 para hospedar outro domínio que possuo de uma subpasta da minha conta.

Por padrão, o WinHost aponta seus outros domínios na raiz da sua conta. Então meu objetivo é duplo:

  1. Eu quero manter esses outros arquivos de domínios fisicamente separados em uma subpasta
  2. Desejo ocultar a dita subpasta na barra de endereço

Para que:

http://myotherdomain.com

É atendido de:

E:\account_root\myotherdomain

Então, usando o módulo de reescrita do IIS 7, geramos essa regra.

<xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Test" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="(^|\.)myotherdomain\.com$" />
                    </conditions>
                    <action type="Rewrite" url="myotherdomain/{R:1}" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

Eu quero que solicitações de myotherdomain.com sejam compensadas na subpasta myotherdomain .

Isso está funcionando, mas apenas se não houver caminhos na solicitação. Se eu solicitar http://myotherdomain.com , recebo uma resposta de 200 & no meu navegador, vejo o documento padrão localizado em E:\account_root\myotherdomain . Nenhum redirecionamento ocorre.

Se você adicionar um caminho à solicitação, por exemplo http://myotherdomain.com/test , agora recebo um redirecionamento 301 para o URL reescrito:

Response: HTTP/1.1 301 Moved Permanently
Location: http://myotherdomain.com/myotherdomain/test/

Que o navegador então GETs:

Request: GET /myotherdomain/test/ HTTP/1.1

A regra de regravação é executada novamente no IIS e, por fim, o IIS tenta veicular o documento padrão localizado em:

E:\account_root\myotherdomain\myotherdomain\test

Que não existe:

Response: HTTP/1.1 404 Not Found

Portanto, a reescrita em si parece estar funcionando; o que não entendo é por que o IIS está lançando um redirecionamento 301 para o mix, mas somente quando há um caminho presente no pedido.

    
por with 17.04.2011 / 01:48

2 respostas

5

Não está redirecionando para adicionar o trailing /?

    
por 17.04.2011 / 02:23
0

Sua regra parece correta e é reescrita em vez de redirecionar, como você supôs. Parece-me que alguma outra coisa no seu site está causando o redirecionamento 301 do lado do cliente. Tente testar uma página .htm para ver se é o aspx ou o htm que está executando o redirecionamento. Sua regra de regravação de URL não causará isso.

Você está no caminho certo. Eu tenho algumas postagens de blog sobre essa situação, incluindo as regras de saída:

por 17.04.2011 / 02:13