Перезапись URL, вызывающая цикл перенаправления
Сегодня меня беспокоит проблема с настройкой перезаписи URL на старом веб-сайте.Net Webforms (РЕДАКТИРОВАТЬ: это проект веб-сайта, а не проект веб-приложения, если это имеет значение). Сайт, на котором я работаю, связан с большим количеством ссылок, все ссылки на "webroot.com/default.aspx", а не просто на "webroot.com". Мы хотим настроить (КУДА-ТО, на данный момент мне все равно, если он находится в global.asax как перенаправление или web.config) переписать URL, чтобы перейти из /default.aspx в /.
Я попытался настроить в коде через global.asax:
if (Request.Url.PathAndQuery.ToLower().Contains("/default.aspx"))
Response.RedirectPermanent("/" + Request.Url.Query, true);
Это приводит к циклу перенаправления, который, как я понимаю, полностью понимаю, почему, было глупой идеей попробовать это. Ни в одном другом каталоге нет default.aspx, поэтому я не беспокоюсь о том, чтобы ловить других в данный момент.
Я попытался настроить перезапись URL через web.config в узле system.webServer, как показано здесь:
<rewrite>
<rules>
<rule name="RemoveDefaultAspxFromRoot" stopProcessing="true">
<match url="default.aspx" ignoreCase="true" />
<action type="Rewrite" url="/" appendQueryString="true" />
</rule>
</rules>
</rewrite>
Это приводит к той же самой проблеме, которая озадачивает меня, поскольку я не думал, что переписывание выполнит перенаправление, но, очевидно, так и есть?
Я попытался добавить следующее в правило в качестве идеи поста в блоге вуду:
<conditions logicalGrouping="MatchAll">
<add input="{REMOTE_PORT}" pattern=".*" />
</conditions>
Без кубиков; все еще застрял в петле перенаправления.
Я даже прошел установку модуля перезаписи URL вручную в IIS и установил там правило через графический интерфейс, который можно увидеть здесь:
http://i.imgur.com/ovYpfhM.png
Я все еще получаю проблему перенаправления.
Кто-нибудь может увидеть что-то, что мне не хватает, или есть другие предложения? Странно, что эта проблема, кажется, решена для других людей с помощью действия Rewrite, но это не работает для меня.
Я пробовал эти решения на IIS7, публикуя их локально и настраивая через IIS и IIS Express через VS2013. Наши производственные серверы используют IIS7.
2 ответа
Я решил добавить следующее в мой web.config для решения этой проблемы:
<defaultDocument>
<files>
<clear />
<add value="default.aspx" />
</files>
</defaultDocument>
на основе реддит поста. Итак, мой общий файл web.config для этого раздела выглядит так:
<system.webServer>
<rewrite>
<rules>
<rule name="RemoveDefaultAspxFromRoot" stopProcessing="true">
<match url="default.aspx" ignoreCase="true" />
<action type="Redirect" url="/" appendQueryString="true" />
</rule>
</rules>
</rewrite>
<defaultDocument enabled="true">
<files>
<clear />
<add value="default.aspx" />
</files>
</defaultDocument>
</system.webServer>
Это прекрасно работает без добавления других файлов. Я не обязательно уверен, что понимаю, почему очистка документов по умолчанию и добавление "default.aspx" работает, когда "default.aspx" уже был установлен в качестве документа по умолчанию через IIS, но это решило мою проблему. Если кто-нибудь может помочь объяснить, почему это так, я хотел бы узнать.
В IIS есть функция документа "по умолчанию", может быть, страница default.aspx является частью этого списка, и хотя вы перенаправляете на "/", что, в свою очередь, переводится в "default.aspx". Который затем переводится в "/" через правило перенаправления, вызывающее цикл.
Смотрите ваш файл ApplicationHost.config для глобальных правил. Также посмотрите этот URL, который документирует иерархию правил.
"Оценка выполняется в порядке" родитель-ребенок ", что означает, что родительские правила оцениваются первыми, а правила, определенные на последнем дочернем уровне, оцениваются последними". - http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference
Попробуйте альтернативное правило перенаправления:
Создайте отдельную страницу с другим именем "notdefault.aspx" в корневом каталоге и перенаправьте все значения по умолчанию на вновь создаваемую страницу. (Скопируйте default.aspx в nodefault.aspx)
Также см. Эту ссылку для получения дополнительной информации о контроле по умолчанию: https://technet.microsoft.com/en-us/library/cc753615(v=ws.10).aspx