URL-адрес IIS7.5 Переписать соответствие регулярному выражению, когда это не должно

Я разделил некоторые страницы между поддоменами и хочу в некоторых случаях переписать URL-адреса на разные страницы в разных поддоменах. Все является правилом перезаписи, за исключением последних двух правил в файле. Эти последние два правила определяют, к какому поддомену следует направить путь, который я установил.

Я делаю это следующим образом: если я добавляю к пути символ подчеркивания (_), он остается в поддомене A. Если я добавляю к пути тильду (~), то он перенаправляется на поддомен B.

Итак, у меня есть такое правило:

<rule name="Login rule" stopProcessing="false">
        <match url="(.*?)/?old-path/Login\.aspx$" />
        <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
            <add input="{HTTP_METHOD}" pattern="GET" />
        </conditions>
        <action type="Rewrite" url="~new-path/login.aspx" />
    </rule>

Обратите внимание, что в конце URL-адреса есть aspx. Он продолжает обработку, но у меня есть общее правило перезаписи в конце списка прямо перед правилами перенаправления. Это нужно для удаления всех расширений ASPX в субдомене A (www), но я хочу оставить расширение ASPX для субдомена B (пожалуйста, не предлагайте удалить предложенное во втором субдомене. Спасибо :)

<rule name="Remove ASPX" stopProcessing="false">
        <match url="^([^www\.]+)\.aspx$" />
        <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
        </conditions>
        <action type="Rewrite" url="_{R:1}" />
    </rule>

Проблема в том, что это не сработает, потому что все URL-адреса имеют www в начале. Я не очень хорошо разбираюсь в регулярных выражениях, но я предполагаю, что мне нужно просто применить это правило ко всем URL-адресам, в которых есть тильда. Я пробовал это, но это тоже не работает:

<match url="^_+\.aspx$" />

По сути, я хочу, чтобы это правило игнорировало URL-адреса, которые я переписал, чтобы в них было ~, но удаляло ASPX, если я поместил _ в начало пути.

Какие-либо предложения?


person Nathan    schedule 16.01.2012    source источник


Ответы (1)


Если я понял вашу проблему, то у вас есть URL: "~new-path/login.aspx", и вы хотите сделать перенаправление на "~new-path/login", верно?
Тогда ваше регулярное выражение должно быть таким:

^(.*~.*)\.aspx$

Примечание: "www" является частью доменного имени и не включается в сопоставление.
Таким образом, если ваш полный URL-адрес "http://www.mysite.com/~new-path/login.aspx", тогда только "~ new-path/login.aspx" будет участвовать в сопоставлении регулярных выражений.

И шаблон {R:1} будет содержать значение в первой группе (скобки): "~new-path/login"

person Anton Palyok    schedule 16.01.2012
comment
На самом деле это был _, который я хочу перенаправить. Но я изменил ваше предложение на ^(.*_.*)\.aspx$, и тестовый URL-адрес совпал! Спасибо. - person Nathan; 16.01.2012