IIS 7.5 URL Rewrite - переписать папку из URL-адреса

Я использую IIS 7.5 и URL Rewrite.

У меня есть сайт с иерархией файлов таким образом:

webroot
webroot/LegacySite

и webroot, и legacy отделяются App-Folders в IIS.


Мне нужно переписать мои URL так:

Ниже моего Web.Conf, присутствующего в папке webroot, на данный момент не работает должным образом, не могли бы вы указать мне то, что мне не хватает?

<?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <rewrite>
                <rules>
                    <rule name="MyRole" stopProcessing="true">
                        <match url=".*" />
                        <conditions>
                            <add input="{HTTP_HOST}" pattern="^mysite.com" />
                            <add input="{PATH_INFO}" pattern="^\LegacySite\" negate="true" />
                        </conditions>
                        <action type="Rewrite" url="\LegacySite\{R:0}" />
                    </rule>
                </rules>
            </rewrite>
        </system.webServer>
    </configuration>

Ответ 1

Следующее должно работать:

<rule name="MyRole" stopProcessing="true">
    <match url="LegacySite/(.*)" />
    <conditions>
        <add input="{HTTP_HOST}" pattern="^mysite.com$" />
    </conditions>
    <action type="Rewrite" url="/{R:1}" appendQueryString="true" />
</rule>

Возможно, вы захотите отменить условие для проверки имени хоста. Это действительно важно? У вас есть другие имена доменов, привязанные к этому веб-сайту, для которых вы не хотите, чтобы перенаправление произошло? Это кажется ненужным. Вам, вероятно, нужно только:

<rule name="MyRole" stopProcessing="true">
    <match url="LegacySite/(.*)" />
    <action type="Rewrite" url="/{R:1}" appendQueryString="true" />
</rule>

Я добавил appendQueryString="true" для передачи любых (необязательных) параметров строки запроса к переписанному URL-адресу.