Я написал список регулярных выражений, которые в настоящее время перенаправляют неиспользуемые страницы на соответствующие страницы, например. если кто-то запросит abc.aspx, он перенаправит их на home.aspx в IIS, однако, видя, что я не могу учитывать все страницы, есть ли способ захватить страницу, которую я мог пропустить, и сопоставить ее с другой страницей?
Использование модуля URL Rewrite v2:
<rule name="CatchAll" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/catchall.aspx?page={REQUEST_URI}" />
</rule>
Это правило будет перехватывать ВСЕ запросы для несуществующих файлов и каталогов. Обычно вы помещаете его в конец (последний или около того).
Все такие запросы будут перенаправлены (внутренне, конечно) на /catchall.aspx
файл, запрошенный URL будет в page
параметр строки запроса. Например, если эта страница (http://www.example.com/hello-kitten
) будет перенаправлен через такой универсальный файл, он будет перезаписан в /catchall.aspx?page=/hello-kitten
.
{REQUEST_FILENAME}
: Полный путь локальной файловой системы к файлу или сценарию, соответствующему запросу. Например:
D:\websites\mysite.com\
http://mysite.com/help/delivery
{REQUEST_FILENAME}
знак равно D:\websites\mysite.com\help\delievry
(даже если такой файл / папка не существует) - я уверен, что вы сможете понять, как он построен из приведенного выше примера (если задействованы виртуальные папки, то он будет работать немного по-другому .. но общая идея здесь ).Условия для этого правила, если его перевести на английский, будут следующими: если запрошенный ресурс НЕ является файлом И НЕ является папкой, то условия выполняются.
В модуле перезаписи URL есть IsFile
тип соответствия, но не имеет IsNotFile
. «Смоделировать» IsNotFile
то IsFile
используется вместе с negate="true"
. То же самое касается IsDirectory
.
Если вы войдете в модуль URL Rewrite через диспетчер IIS и нажмете «Изменить» в этом правиле, вам будет намного легче понять, что именно они делают, по сравнению с моим бормотанием (диспетчер IIS имеет очень хороший графический интерфейс для создания этих правил).
Вау, давайте добавим этому конфигу больше контекста !!
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".json" mimeType="text/json" />
</staticContent>
<rewrite>
<rules>
<rule name="CatchAll" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="/index.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>