Перезапись URL-адреса с /default.aspx на / - PullRequest
14 голосов
/ 26 марта 2009

Я использую инструмент URL Rewriting.NET с IIS 6. У меня установлено содержимое страницы по умолчанию для default.aspx в IIS. Я пытаюсь сделать так, чтобы /default.aspx предоставил перенаправление 301 в корневой каталог (www.example.com/default.aspx -> www.example.com). Я пытался отключить документы по умолчанию, но безрезультатно.

Я надеюсь использовать пару правил перезаписи URL .NET для достижения этой цели. Есть мысли?

EDIT:

Извините, я забыл уточнить. Если я перенаправлю из /default.aspx в / с включенными по умолчанию документами (я бы хотел оставить их включенными), то получу бесконечный цикл по умолчанию -> / -> default

Ответы [ 6 ]

15 голосов
/ 02 июня 2009

В конце концов я использовал IIS 7 с модулем перезаписи URL, что позволяет вам правильно выполнить перенаправление.

Редактировать:

Правило

<rule name="Default Redirect" stopProcessing="true">
    <match url="^default\.aspx$" />
    <action type="Redirect" url="/" redirectType="Permanent" />
</rule>

вы можете сделать это с отдельным правилом для каждой папки, или вы можете использовать

<rule name="All Redirect">
    <match url="^(.*\/)*default\.aspx$" />
    <action type="Rewrite" url="{R:1}" />
</rule>
5 голосов
/ 28 ноября 2011

Я столкнулся с этой самой проблемой некоторое время назад, пытаясь понять, почему некоторые установки IIS будут работать, перенаправляя /default.aspx, а некоторые вырождаются в терминальный цикл.

Я нашел ответ, был ли asp.net отображен 'подстановочный знак' для выполнения всех запросов в IIS.

Проще говоря, если у вас есть готовая установка IIS, он всегда будет добавлять документ по умолчанию к любому запросу на корень сайта. Таким образом, example.com становится example.com/default.aspx при проверке Request.Url в ASP.NET. Поэтому, если вы обнаружите эту ситуацию и попытаетесь перенаправить ее обратно на сайт example.com, IIS сделает это, добавит /default.aspx, и ваш код будет зациклен на своем собственном создании.

Исключением является случай, когда вы настроили отображение с подстановочными знаками, чтобы все запросы обрабатывались через конвейер asp.net. В этом случае IIS больше не добавляет документ по умолчанию к каждому запросу на уровне Request.Url. И, таким образом, вы можете сделать перенаправление.

Я поместил все это в этом сообщении в блоге: 301 Перенаправление из /default.aspx в корень сайта - последнее слово - но это было написано несколько лет назад, и изменения в IIS7, возможно, решили проблему в соответствии с принятым в настоящее время ответом.

Но если вы боретесь с этой проблемой, то лучше посмотреть на состояние подстановочного сопоставления.

2 голосов
/ 15 июля 2009

У меня была такая же проблема. Для тех, кто задается вопросом, почему кто-то захочет это сделать, это вопрос SEO. Если Google индексирует вашу домашнюю страницу с и без default.aspx в конце, PageRank и популярность ссылок будут разделены между двумя URL-адресами. Теперь, если у вас возникла эта проблема, и вы можете объединить два URL-адреса, тогда вы можете получить повышение в поисковом рейтинге. Еще одна вещь, которую нужно иметь в виду: если вы столкнетесь с проблемой, вы ДОЛЖНЫ использовать перенаправление 301 для Google, чтобы объединить их индекс между двумя URL-адресами. В противном случае ваши усилия будут тщетными.

Это слишком поздно, так как вы уже решили эту проблему путем обновления до IIS7. Но я просто добавлю, что единственное решение этой проблемы, которое я придумал для IIS6, - это добавить фильтр ISAPI.

Я задокументировал полное решение здесь ... http://swortham.blogspot.com/2008/12/redirecting-default-page-defaultaspx-to.html

1 голос
/ 27 марта 2009

Если я вас правильно понимаю, вы не хотите отображать файл default.aspx всякий раз, когда кто-то входит в папку с этим документом.

Так что, если они его нажмут, вы хотите автоматически перенаправить на '/' и просто загрузить документ по умолчанию?

Если это так, то, как указано выше, вы рискуете получить бесконечный цикл. Второй комментарий дает вам ответ, но я предполагаю, что, расширив его до движка переписывания, вам нужно:

Отключить документы по умолчанию Зарегистрируйте каждую папку с помощью механизма перезаписи При запросе этой папки загрузите файл default.aspx в соответствии с целевым правилом

Это звучит правильно?

Я должен спросить, почему ты хочешь это сделать?

0 голосов
/ 21 апреля 2009

хорошо, вы можете использовать обычный .net для проверки URL-адреса httprequest, если в нем есть «default.aspx», вы можете перенаправить на «/», бесконечного цикла не будет, и вам лучше сделать это при предварительной загрузке и завершить ответ, чтобы минимизировать время, необходимое для обработки

0 голосов
/ 26 марта 2009

Я не уверен, что понимаю, в чем проблема.

Хотя, если вы отключите документы по умолчанию, то / будет просто указывать на каталог, а не на страницу default.aspx.

Оставьте документы по умолчанию включенными и просто выполните перенаправление в зависимости от того, находится ли default.aspx в запрошенном URL или нет.

...