ASP.Net Umbraco中的URL重写

时间:2013-08-13 06:20:12

标签: asp.net url-rewriting umbraco

我有一个像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重写案例的新手,所以如果你在我当前的代码中发现任何错误,你总是可以指出..

2 个答案:

答案 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"部分,并且可以使用相对网址路径。