Как мне удалить index.aspx из URL, используя web.config?
Как можно перенаправить с www.example.com/section/index.aspx на www.example.com/section, используя правила перезаписи в web.config? Это также должно работать на различных уровнях, таких как www.example.com/parent/child
* Отметив, что у меня нет доступа к серверу. Я могу просто отредактировать файл web.config и указать серверу пересобрать приложение.
2 ответа
Лучше всего использовать модуль перезаписи URL IIS7, но вам необходимо установить его на сервере. Это довольно простой в использовании и мощный одновременно. Возможно, он уже установлен, если вы размещены на нем, потому что, хотя он не установлен по умолчанию, он от Microsoft и довольно часто используется.
Если вы используете версию 2.0 или выше asp.net, вы можете добавить urlMappings
раздел web.config:
<system.web>
<urlMappings enabled="true">
<add url="~/Section" mappedUrl="~/Section/index.aspx"/>
</arlMappings>
</system.web>
Но у этого есть некоторые проблемы: во-первых, если запрошенный URL-адрес не обрабатывается модулем ASP.Net или не доставляется в ваше приложение, перезапись никогда не происходит. Это может произойти, например, потому что вы не используете файл ".aspx". Кроме того, в некоторых конфигурациях запрашиваемый файл должен существовать. Другая проблема заключается в том, что не поддерживаются подстановочные правила, поэтому вам придется добавить правила, чтобы переписать все возможные пути по отдельности.
И, наконец, есть asp.net, переписывающий http-модули, которые вы можете поместить в каталог bin и добавить в ваш web.config. Вот некоторые (возможно, устаревшие) варианты ScottGu для перезаписи URL.
Возможно, это отвратительно, но, создав правила для каждого возможного уровня, я смог переписать все пути, удаляя index.aspx из URL.
начиная с
<rule name="Migrate to PHP">
<match url="^([_0-9a-z-]+).aspx"/>
<action type="Redirect" redirectType="Permanent" url="/"/>
</rule>
и заканчивая
<rule name="Migrate to PHP all the way">
<match url="^([_0-9a-z-]+)/([_0-9a-z-]+)/([_0-9a-z-]+)/([_0-9a-z-]+)/([_0-9a-z-]+).aspx"/>
<action type="Redirect" redirectType="Permanent" url="{R:1}/{R:2}/{R:3}/{R:4}"/>
</rule>