IIS: web.config перенаправить на другой URL, сохранив исходный в адресной строке - PullRequest
1 голос
/ 28 февраля 2012

Я пытаюсь понять, как это сделать, но кажется очень сложным (по крайней мере для кого-то вроде меня, не имеющего опыта работы с IIS, но только с Apache). Я портирую веб-сайт из Linux на сервер Windows, и на сервере Linux у меня есть .htaccess, который помогает мне переписывать URL, чтобы скрыть страницы и аргументы:

RewriteRule ^ store / ([0-9a-zA-Z] +) $ http://www.domain.com/store/$1/ [R]

RewriteRule ^ store / ([0-9a-zA-Z] +) / $ http://www.domain.com/pages/store.asp?name=$1

RewriteRule ^ store / ([0-9a-zA-Z] +) / ([0-9a-zA-Z] +) $ http://www.domain.com/store/$1/$2/ [R]

RewriteRule ^ store / ([0-9a-zA-Z] +) / ([0-9a-zA-Z] +) / $ http://www.domain.com/pages/store.asp?name=$1&page=$2

Так что, когда кто-то посещает http://www.domain.com/store/client1/, посещает http://www.domain.com/pages/store.asp?name=client1 (и т. Д. С максимум 4 аргументами), но в адресной строке браузера показанный URL-адрес по-прежнему http://www.domain.com/store/client1/

Я не могу найти способ сделать то же самое на IIS 7 ... Я сделал что-то вроде ниже:

            <rule name="Rule 5">
                <match url="^store/([0-9a-zA-Z]+)$" ignoreCase="false" />
                <action type="Redirect" url="http://www.domain.com/store/{R:1}/" redirectType="Found" />
            </rule>
            <rule name="Rule 6">
                <match url="^store/([0-9a-zA-Z]+)/$" ignoreCase="false" />
                <action type="Redirect" url="http://www.domain.com/pages/store.asp?name={R:1}" appendQueryString="false" redirectType="Found" />
            </rule>
            <rule name="Rule 7">
                <match url="^store/([0-9a-zA-Z]+)/([0-9a-zA-Z]+)$" ignoreCase="false" />
                <action type="Redirect" url="http://www.domain.com/store/{R:1}/{R:2}/" redirectType="Found" />
            </rule>
            <rule name="Rule 8">
                <match url="^store/([0-9a-zA-Z]+)/([0-9a-zA-Z]+)/$" ignoreCase="false" />
                <action type="Redirect" url="http://www.domain.com/pages/store.asp?name={R:1}&amp;page={R:2}" appendQueryString="false" redirectType="Found" />
            </rule>

Это работает для перенаправления, поэтому, если я позвоню www.domain.com/store/arg1/arg2/, я посещаю www.domain.com/pages/store.asp?name= {R: 1} & page = { R: 2}, но в адресной строке браузера я вижу перенаправленный адрес store.asp? Name = {R: 1} & page = {R: 2} вместо оригинального www.domain.com/store/arg1/arg2/, это то, что мне нужно.

Есть ли способ сделать это? Я провел уже несколько часов без рабочего решения ...

1 Ответ

2 голосов
/ 28 февраля 2012

Вместо использования действия типа Redirect используйте Rewrite. См. сообщение в блоге для получения дополнительной информации. При этом URL сервера будет переписан на тот, который вы хотите, вместо того, чтобы перенаправлять браузер на новый URL.

...