Модуль перезаписи URL для IIS7 не обрабатывает правило перезаписи правильно - PullRequest
0 голосов
/ 02 сентября 2011

У меня есть прикрепленные правила перенаправления и перезаписи. По сути, www.foo.com/vehicles/vehicle-detail.aspx?stockno=123456 переписан на www.foo.com/123456. Это работает, как и ожидалось, с правилами, которые у меня есть. Теперь, если я попытаюсь перейти на страницу, которая не существует (например, www.foo.com/test.aspx), правило переписывания будет квалифицировано, и IIS попытается перенаправить запрос на www.foo.com/vehicles/vehicle-detail. aspx (без строки запроса). На странице vehicle-detail.aspx у меня есть код для перенаправления на домашнюю страницу, если в строке запроса нет действительного stockno, так что это то, что происходит. Я не уверен, как исправить правило (я), чтобы условие не считалось истинным. Я приложил правила и снимки экрана с отслеживанием невыполненных запросов. Я включил просмотр правила запроса / перезаписи.

<rule name="Redirect StockNo" enabled="true" stopProcessing="true">
<match url="^Vehicles/Vehicle-Detail\.aspx$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
    <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
    <add input="{QUERY_STRING}" pattern="^stockno=([^=&amp;]+)$" />
</conditions>
<action type="Redirect" url="{C:1}" appendQueryString="false" />

<rule name="Rewrite StockNo" enabled="true" stopProcessing="true">
<match url="^([^/]+)/?$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="Vehicles/Vehicle-Detail.aspx?stockno={R:1}" />

enter image description here

enter image description here

enter image description here

1 Ответ

0 голосов
/ 03 сентября 2011

То, что вам нужно, является чем-то более уникальным для дружественного шаблона. Если вы знаете, что это всегда будут цифры, вы можете иметь:

<match url="^([\d]+)/?$" />

Это будет соответствовать только www.foo.com/ enjdigits} с дополнительной косой чертой.

Еще один вариант - сделать URL-адрес примерно таким: www.foo.com/s/ndomstocknocasts/. С / s / у вас есть что-то уникальное, что вы можете уверенно сопоставить. S - это просто пример, который короток для stockno, поэтому вы можете использовать то, что хотите.

...