Перезапись URL-адреса из /default.aspx в /

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

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

РЕДАКТИРОВАТЬ:

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

6 ответов

Решение

В конце концов я использовал 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>

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

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

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

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

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

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

У меня такая же проблема. Для тех, кто задается вопросом, почему кто-то захочет это сделать, это вопрос 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

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

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

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

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

Звучит ли это правильно?

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

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

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

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

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

Другие вопросы по тегам