2013-10-02 4 views
0

Я видел тысячи таких примеров:IIS 7 Дружественные URL переписать

<rule name="ex1" enabled="false" stopProcessing="true"> 
    <match url="^article/([^/]+)/?$" /> 
    <conditions> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
    </conditions> 
    <action type="Rewrite" url="article/{R:1}.html" /> 
</rule> 

Что я могу легко добраться до работы. Однако я пытаюсь сделать www.mydomain.net/test переписанным на www.mydomain.net/test.html, который я попытался выполнить с приведенным ниже конфигом.

<rule name="ex2" enabled="true" 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="/{R:1}.html" /> 
</rule> 

К сожалению, у меня не было никакого успеха, и я получаю простой 404 при каждой попытке. Хотя, когда я проверяю свое регулярное выражение, он успешно подходит для чего-то, что я хочу сопоставить - например. www.mydomain.net/test.

Может ли кто-нибудь дать понять, почему это так?

(Использование Win7, IIS7 Ultimate).

+0

Не уверен, что работает WHIT первое правило, которое не делает со вторым? Знаете ли вы, что когда вы нажимаете 'www.mydomain.net/test', только часть пути (здесь' test') сопоставляется с шаблоном, который вы определили? – cheesemacfly

+0

Ну, первое правило работает, поскольку оно переписывает www.mydomain.net/article/test на www.mydomain.net/article/test.html, что является правильным. Второе правило, учитывая изменения, применяемые к регулярному выражению, я думал, будет работать на www.mydomain.net/test => www.mydomain.net/test.html. Тестирование второго регулярного выражения возвращает true для «test», но не для «/ test» или «www.mydomain.net/test», как вы можете легко видеть в регулярном выражении из отрицания^[^ /]. – Marcus

+0

Хорошо, понял. Итак, в конце вы хотите вызвать правило перезаписи только тогда, когда запрошенный путь не содержит '/', но, возможно, в конце? – cheesemacfly

ответ

1

Вы могли бы попытаться на соответствие вместо этого:

"^([^/]+)/?$" 

И замена с этим:

{R:1}.html 

Я не уверен, но я не думаю, что соответствует IIS на ведущий/так это может быть то, что сработает с вашей перепиской.

Пример: http://regexr.com?36jiq

+0

Я попробую это как можно скорее. На праздник прямо сейчас, спасибо! – Marcus

Смежные вопросы