У меня проблема с модулем перезаписи URL-адресов IIS7. Когда я добавляю следующее правило, я получаю ошибку 404 на всех страницах.
<rule name="Remove .aspx" stopProcessing="true">
<match url="(.+)\.aspx" />
<action type="Redirect" redirectType="Permanent" url="{R:1}" />
Все, что я хочу сделать, это удалить все расширения файлов. Заблудился с этим, может кто знает решение?
Заранее спасибо.
С уважением, eimeim
Удаление .aspx из URL-адреса путем перенаправления пользователя на URL-адрес без .aspx - это только одна часть решения.
Если вы сделаете это перенаправление, как сервер узнает, какой сценарий (с расширением .aspx) выполнить, если URL-адрес не содержит правильного имени (без расширения .asp)? Поэтому вам нужно добавить правило, чтобы исправить это. Способ сделать это - создать правило, которое соответствует любому URL-адресу, но не соответствует ни одному существующему файлу или каталогу. Если мы столкнемся с этим, мы можем предположить, что это может быть переписанная ссылка на страницу ASPX, поэтому мы переписываем URL-адрес, добавляя .aspx. Если это не страница ASPX, это все равно приведет к ошибке 404.
Чтобы все это работало с вашим существующим кодом, вам нужно переписать исходящий ответ ваших страниц, чтобы удалить все существующие ссылки на страницы .aspx, чтобы не включать расширение. В противном случае вы получите много ненужных перенаправлений, и сообщения формы на aspx-страницы больше не будут работать.
И последнее, но не менее важное: вам нужно отключить сжатие, поскольку перезапись исходящего трафика не работает при включенном сжатии.
Все это приводит к следующим правилам перезаписи для вас web.config:
<system.webServer>
<rewrite>
<rules>
<rule name="Remove .aspx from URL" stopProcessing="true">
<match url="(.*)\.aspx$" />
<action type="Redirect" url="/{R:1}" />
</rule>
<rule name="Add .aspx for non-existing files or directories">
<match url="(.*)" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/{R:0}.aspx" />
</rule>
</rules>
<outboundRules>
<rule name="Remove .aspx from links in the response" preCondition="Only for HTML">
<match filterByTags="A, Area, Base, Form, Frame, IFrame, Link, Script" pattern="(.*)\.aspx(\?.*)?$" />
<action type="Rewrite" value="{R:1}{R:2}" />
</rule>
<preConditions>
<preCondition name="Only for HTML">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
<urlCompression doStaticCompression="false" doDynamicCompression="false" />
</system.webServer>