URL-адрес IIS7.5 переписать регулярное выражение, когда это не должно - PullRequest
0 голосов
/ 16 января 2012

Я разделил несколько страниц между поддоменами и в некоторых случаях хочу переписать 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, если я поместил _ в начале пути.

Есть предложения?

1 Ответ

1 голос
/ 16 января 2012

Если я понял вашу проблему, то у вас есть 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"

...