У меня есть правило перезаписи, отвечающее перенаправлением 301, но я не знаю почему.
Я использую общий хостинг WinHost, использую перезапись IIS 7 для размещения другого домена, которым я владею, из подпапки моей учетной записи.
По умолчанию WinHost указывает другие ваши домены в корень вашей учетной записи. Итак, у меня двоякая цель:
Так что:
http://myotherdomain.com
Обслуживается от:
E:\account_root\myotherdomain
Итак, используя модуль перезаписи IIS 7, я создал это правило.
<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>
Я хочу запросы на myotherdomain.com
компенсировать myotherdomain
подпапка.
Это работает, но только если в запросе нет путей. Если я прошу http://myotherdomain.com
Я получаю ответ 200, и в моем браузере я вижу документ по умолчанию, расположенный по адресу E:\account_root\myotherdomain
. Перенаправления не происходит.
Если вы добавите путь к запросу, например http://myotherdomain.com/test
, теперь я получаю 301 редирект на перезаписанный URL:
Response: HTTP/1.1 301 Moved Permanently
Location: http://myotherdomain.com/myotherdomain/test/
Что браузер затем ПОЛУЧАЕТ:
Request: GET /myotherdomain/test/ HTTP/1.1
Затем правило перезаписи снова запускается в IIS, и в конечном итоге IIS пытается обслужить документ по умолчанию, расположенный по адресу:
E:\account_root\myotherdomain\myotherdomain\test
Чего не существует:
Response: HTTP/1.1 404 Not Found
Таким образом, похоже, что перезапись работает; я не понимаю, почему IIS добавляет 301 редирект в микс, но только тогда, когда в запросе есть путь.
Разве это не перенаправление для добавления конечного /?
Ваше правило выглядит правильным и, как вы предполагали, перезаписывает, а не перенаправляет. Мне кажется, что что-то еще на вашем сайте вызывает перенаправление 301 на стороне клиента. Попробуйте протестировать страницу .htm, чтобы увидеть, aspx или htm выполняет перенаправление. Ваше правило перезаписи URL этого не вызовет.
Вы на правильном пути. У меня есть пара сообщений в блоге об этой ситуации, включая исходящие правила: