URL-адрес URL-адреса IIS: добавьте конечную косую черту, за исключением .html и .aspx
Добавление конечной косой черты ко всем URL-адресам через модуль перезаписи URL-адреса IIS широко распространен, но как я могу добавлять исключения для URL-адресов, которые заканчиваются на .html и .aspx?
Сегодня у меня есть это:
<rule name="Add trailing slash" stopProcessing="true">
<match url="(.*[^/])$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<!-- Doesn't seem to be working -->
<!--<add input="{REQUEST_URI}" pattern="(.*?).html$" negate="true" />-->
<!--<add input="{REQUEST_URI}" pattern="(.*?).aspx$" negate="true" />-->
</conditions>
<action type="Redirect" redirectType="Permanent" url="{R:1}/" />
</rule>
Ответы
Ответ 1
Если вы хотите, чтобы что-то было сделано правильно, вы должны сделать это сами, очевидно...
Вот решение моего вопроса:
<rule name="Add trailing slash" stopProcessing="true">
<match url="(.*[^/])$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" pattern="(.*?)\.html$" negate="true" />
<add input="{REQUEST_FILENAME}" pattern="(.*?)\.aspx$" negate="true" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="{R:1}/" />
</rule>
Обновить: Я подробно об этом писал.
Ответ 2
Изменяя другие ответы, я использовал это, поэтому мне не нужно было бы указывать список расширений файлов:
<!-- Ensure trailing slash -->
<rule name="Add trailing slash" stopProcessing="true">
<match url="(.*[^/])$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" pattern="(.*?)\.[a-zA-Z]{1,4}$" negate="true" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="{R:1}/" />
</rule>
Ответ 3
Мы добавляем несколько расширений следующим образом:
<add input="{URL}" negate="true" pattern="((.+).(jpg|ico|gif|js|png|htm|css|html))" ignoreCase="true" />
Ответ 4
Чтобы предотвратить добавление косой черты всех файлов, я изменил правило соответствия на это:
<match url="^([^.]*[^/])$" />
Это правило применяется только к путям, которые включают любое количество неточечных символов, которое не заканчивается косой чертой. Таким образом, любой путь, который включает точку (например, xxx.html, xxx.aspx и т.д.), Будет исключен без какого-либо дополнительного правила отрицания.
Поиск наличия точки в правиле совпадения позволил мне полностью удалить правила условий, которые используют типы соответствия IsFile и IsDirectory. Эти типы соответствия разрешены только в распределенных правилах (web.config), а не в глобальных правилах (applicationHost.config), поэтому я был вынужден реплицировать это правило для каждого сайта, а не применять его ко всем сайтам с использованием глобального правила. Изменив регулярное выражение в правиле соответствия, чтобы исключить файлы и удалить условия IsFile и IsDirectory, мне удалось создать глобальное правило вместо нескольких распределенных правил.
Ответ 5
Это почти сработало для меня. Мне пришлось изменить его на
<add input="{URL}" pattern="(.*?)\.html$" negate="true" />
<add input="{URL}" pattern="(.*?)\.aspx$" negate="true" />
В противном случае спасибо за это!
Ответ 6
Для предотвращения ошибочного превращения вызовов POST, DELETE и других методов REST без завершающего слеша в запрос GET при перенаправлении рассмотрите возможность добавления следующего условия:
<add input="{REQUEST_METHOD}" matchType="Pattern" pattern="GET" ignoreCase="true" />