Não está redirecionando para adicionar o trailing /?
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:
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.
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: