我有一个像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重写案例的新手,所以如果你在我当前的代码中发现任何错误,你总是可以指出..
答案 0 :(得分:4)
如果您想将/brandName_x
重定向/重写为/brands/brandName_x
,则需要设置一个重定向到真实网址的虚拟网址。
<add name="redirect_brands" redirectMode="Permanent" ignoreCase="true"
rewriteUrlParameter="IncludeQueryStringForRewrite"
virtualUrl="^/(.*)$" destinationUrl="^/brands/$1" />
在上面一行中,virtualUrl正在寻找一个字符串&#34; / brandName_x&#34;它将被重定向到&#34; / brands / brandName_x&#34;这是实际节点所在的位置。
为了达到相反的目的,你可以这样做:
<add name="redirect_brands" redirectMode="Permanent" ignoreCase="true"
rewriteUrlParameter="IncludeQueryStringForRewrite"
virtualUrl="^/brands/(.*)$" destinationUrl="^/$1" />
答案 1 :(得分:1)
尝试:
<add name="301_bname" redirectMode="Permanent" ignoreCase="true"
rewriteUrlParameter="IncludeQueryStringForRewrite" virtualUrl="^~/brands/(.*)"
destinationUrl="~/$1" />
virtualUrl
参数使用正则表达式来匹配传入的URL。然后,您可以使用$1
表示法将模式传递给destinationUrl
参数。
由于两个网址都在同一个域中,并且(我假设)在您的网络应用程序中,因此您不需要redirect="Domain"
部分,并且可以使用相对网址路径。