1

我有一个这样的 URL www.mydomain.com/brands/bname,我想重写它www.mydomain.com/bname我已经做了一些这样的逻辑

<add name="301_bname" redirectMode="Permanent" redirect="Domain" ignoreCase="true"
        rewriteUrlParameter="IncludeQueryStringForRewrite"
        virtualUrl="http://(?:www.)??mydomain.com/brands/bname`"
        destinationUrl="www.mydomain.com/bname`" />

但问题是这只有在我硬编码时才有效bname。在我的情况下,这个 bname 是动态的。我能做些什么来克服这个问题?注意:我是URL重写案例的新手,所以如果您在我当前的代码中发现任何错误,您可以随时指出..

4

2 回答 2

4

如果您想重定向/重写/brandName_x/brands/brandName_x,您需要设置一个重定向到真实 URL 的虚拟 URL。

<add name="redirect_brands" redirectMode="Permanent" ignoreCase="true"
rewriteUrlParameter="IncludeQueryStringForRewrite"
virtualUrl="^/(.*)$" destinationUrl="^/brands/$1" />

在上面的行中,virtualUrl 正在寻找一个字符串“/brandName_x”,该字符串将被重定向到实际节点所在的“/brands/brandName_x”。

为了达到相反的效果,您可以这样做:

<add name="redirect_brands" redirectMode="Permanent" ignoreCase="true"
rewriteUrlParameter="IncludeQueryStringForRewrite"
virtualUrl="^/brands/(.*)$" destinationUrl="^/$1" />
于 2013-08-13T10:22:23.240 回答
1

尝试:

<add name="301_bname" redirectMode="Permanent" ignoreCase="true"
rewriteUrlParameter="IncludeQueryStringForRewrite" virtualUrl="^~/brands/(.*)"
destinationUrl="~/$1" />

virtualUrl参数使用正则表达式来匹配传入的 URL。然后,您可以使用$1符号将模式传递给destinationUrl参数。

由于两个 url 都在同一个域上,并且(我假设)在您的 Web 应用程序中,因此您不需要该redirect="Domain"部分,您可以使用相对 URL 路径。

于 2013-08-13T08:31:45.867 回答