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

Ошибка тестового шаблона правила перезаписи URL-адреса IIS: входные данные для тестирования не соответствуют шаблону

Я использую это как руководство для работы над правилом перезаписи IIS: https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/creating-rewrite-rules-for-the-url-rewrite-module

Извините - тоже спросили на SO (https://stackoverflow.com/questions/61149139/iis-url-rewrite-rule-test-pattern-error-the-input-data-to-test-does-not-match-t), но Server Fault может лучше подходить для этого типа вопросов, поэтому задаю здесь.

Это мое первое правило, использующее руководство из microsoft doc:

From: http://localhost/article/342/some-article-title
To: http://localhost/article.aspx?id=342&title=some-article-title

Enter into "Edit Inbound Rule"
Pattern: ^article/([0-9]+)/([_0-9a-z-]+)
Rewrite URL: article.aspx?id={R:1}&title={R:2}

Enter into "Test Pattern"
Input data to test: article/234/some-title
Pattern: ^article/([0-9]+)/([_0-9a-z-]+)
To: article.aspx?id=342&title=some-article-title

Он работает нормально, и тест тоже работает - скриншот здесь:

Вот как выглядит правило в файле web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <directoryBrowse enabled="true" />
        <rewrite>
            <rules>
                <rule name="a">
                    <match url="^article/([0-9]+)/([_0-9a-z-]+)" />
                    <action type="Rewrite" url="article.aspx?id={R:1}&amp;title={R:2}" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

Однако я хочу, чтобы правило работало наоборот, поэтому я попробовал следующее в определении правила:

From: http://localhost/article.aspx?id=342&title=some-article-title
To: http://localhost/article/342/some-article-title

Enter into "Edit Inbound Rule"
Pattern: ^article.aspx?id=([0-9]+)&title=([_0-9a-z-]+)
Rewrite URL: article/([0-9]+)/([_0-9a-z-]+)

Enter into "Test Pattern"
Input data to test: article.aspx?id=342&title=some-article-title
To: article/234/some-title

К сожалению, это не работает - когда я тестирую шаблон, я получаю ответ «Входные данные для тестирования не соответствуют шаблону».

Снимок экрана моей попытки заставить правило работать наоборот:

Вот как выглядит второе правило в файле web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <directoryBrowse enabled="true" />
        <rewrite>
            <rules>
                <rule name="a">
                    <match url="^article.aspx?id=([0-9]+)&amp;title=([_0-9a-z-]+)" />
                    <action type="Rewrite" url="article/([0-9]+)/([_0-9a-z-]+)" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

Во втором правиле я пробовал с отмеченной опцией «Добавить строку запроса» и без нее (отрывок выше с отмеченной опцией).

Интересно, что я делаю не так?

Это потому, что вы должны избежать ? как это: \? в выкройке.

Вот правильная версия:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <directoryBrowse enabled="true" />
        <rewrite>
            <rules>
                <rule name="a">
                    <match url="^article.aspx\?id=([0-9]+)&amp;title=([_0-9a-z-]+)" />
                    <action type="Rewrite" url="article/([0-9]+)/([_0-9a-z-]+)" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>