Могу ли я указать в правиле перенаправления в модуле IIS7 URL Rewrite, чтобы оно не применялось к запросам http-post?

Могу ли я в модуле перезаписи URL-адресов IIS7 указать в правиле перенаправления, чтобы оно не применялось к запросам http-post? Я использую шаблоны, предоставленные Microsoft, для строчных букв всех URL-адресов и добавления косой черты в конце. Однако у меня есть почтовые запросы AJAX, которые не соответствуют этой спецификации, но они ломаются, мы их переписываем как 301. Меня не беспокоят POST-запросы для SEO, поэтому я бы предпочел, чтобы я мог просто указать в правиле, чтобы игнорировать его. Ниже приведены мои правила:

            <rule name="AddTrailingSlashRule" stopProcessing="true">
                <match url="(.*[^/])$" />
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                </conditions>
                <action type="Redirect" url="{R:1}/" />
            </rule>
            <rule name="LowerCaseRule" stopProcessing="true">
                <match url="[A-Z]" ignoreCase="false" />
                <action type="Redirect" url="{ToLower:{URL}}" />
            </rule>

person Blegger    schedule 13.05.2011    source источник


Ответы (2)


У вас есть доступ к этому в переменной {REQUEST_METHOD} при условиях.

<add input="{REQUEST_METHOD}" matchType="Pattern" pattern="POST" ignoreCase="true" negate="true" />
person patridge    schedule 13.05.2011
comment
Я обнаружил это только наткнувшись на систему правил в IIS. Окно «Добавить условие» предлагает интерфейс intellisense в поле ввода, когда вы вводите первый {. - person patridge; 13.05.2011
comment
Спасибо за этот ответ. Это очень помогло мне, хотя я обнаружил, что вам нужно указать negate = true в этом условии, чтобы правило перезаписи применялось к вещам, которые не являются REQUEST_METHOD = POST. - person JamieGaines; 28.06.2012
comment
Отличный улов, @thinkzig! У меня определенно есть этот negate на том месте, где я его использую; Я, должно быть, потерял его в перетасовке к SO. Я исправил ответ сейчас. - person patridge; 02.07.2012

Некоторое время назад у нас была та же проблема, что и у OP, а затем мы применили решение patridge, которое работало нормально, пока мы не заметили, что некоторые вызовы REST DELETE не работают. Оказалось, что это перенаправление конечной косой черты, делающее GET из запросов DELETE.

Поэтому я изменил решение, чтобы правило перенаправления применялось только к запросам GET.

<add input="{REQUEST_METHOD}" matchType="Pattern" pattern="GET" ignoreCase="true" />
person Johan B    schedule 28.07.2019