IIS7.5 URL Пренаписване на Regex съвпадение, когато не трябва

Разделих някои страници между поддомейни и искам да направя 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} ще съдържа стойност в първата група (скоби): "~нов път/влизане"

person Anton Palyok    schedule 16.01.2012
comment
Всъщност това беше _, което искам да пренасоча. Но промених предложението ви на ^(.*_.*)\.aspx$ и тестовият url се оказа съвпадащ! Благодаря. - person Nathan; 16.01.2012