IIS:web.config重定向到另一个URL,保留地址栏中的原始URL

时间:2012-02-28 12:50:07

标签: asp.net iis redirect asp-classic rewrite

我正在努力了解如何做到这一点,但似乎非常复杂(至少对于像我这样没有IIS经验但只有Apache的人)。我正在将一个网站从Linux移植到Windows服务器,在Linux服务器上我有一个.htaccess,它可以帮助我重写网页来隐藏页面和参数:

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个参数),但在浏览器地址栏中,显示的网址仍为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}&amp; page = {R:2}而不是原来的www.domain.com/store/arg1 / arg2 /,而不是我需要的。

有办法做到这一点吗?我花了几个小时没有工作解决方案......

1 个答案:

答案 0 :(得分:2)

使用Redirect而不是使用Rewrite类型的操作。有关详细信息,请参阅此blog post。这会将服务器上的URL重写为您想要的URL,而不是将浏览器重定向到新的URL。