Назад | Перейти на главную страницу

Можно ли написать регулярное выражение, которое улавливает совпадение, которое другие пропустили в IIS?

Я написал список регулярных выражений, которые в настоящее время перенаправляют неиспользуемые страницы на соответствующие страницы, например. если кто-то запросит 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\
  • Запрошенный URL: 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>