Generic Web.Config重写以删除查询字符串并添加url seo slug

时间:2013-04-10 04:29:58

标签: asp.net url-rewriting seo web-config url-rewrite-module

我正在尝试创建以下网址重写。

<rule name="Imported Rule 3">
    <match url="^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)" ignoreCase="true" />
    <action type="Rewrite" url="/{R:0}/{R:1}.aspx?p={R:2}&title={R:3}" appendQueryString="true" />                  
</rule>

我希望以下网址重写为以下内容。

/Catalog/Product/1/Title-Description

/Catalog/Product.aspx?pid=1&title=Title-Description

/Events/Detail/1/Today
/Events/Detail.aspx?pid=1&title=Title-Description

基本上我希望写入是通用的并适用于多种场景。 任何时候有一个带有4个斜杠的网址,我希望重写规则将其提取并将其转换为网址。

所以事件是

的网址

1/1/1/1有效。

哪个会转换为

/1/1.aspx?pid=1&title=1

给你举个例子。

我不想为每个场景编写单独的重写。

然而,我写的上述重写不断在服务器上抛出错误,我似乎无法找出我的语法有什么问题。服务器发出通用500错误,因此无法缩小范围。

我很确定问题在于操作标记

我把它写成

<action type="Rewrite" url="/{R:0}/{R:1}.aspx?p={R:2}&title={R:3}" appendQueryString="true" />     

<action type="Rewrite" url="/{R:1}/{R:2}.aspx?p={R:3}&title={R:4}" appendQueryString="true" />     

两种选择都不起作用。

1 个答案:

答案 0 :(得分:2)

我认为有一些问题。第一个是使用{R:0},因为你已经发现了自己。 {R:0}将整个网址与{R:1}{R:2}等匹配,以匹配这些网址。因此,在这种情况下,您必须使用{R:1}{R:2}

另一个问题是,您可能错误地使用?p={R:3}而不是?pid={R:3}。最后,可能出现500错误的原因是您没有对&title中的&符号进行适当的XML编码,而且应该是&amp;title

我认为以下内容应该有效:

<rule name="Imported Rule 3" stopProcessing="true">
    <match url="^([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)/([a-zA-Z0-9_-]+)" />
    <action type="Rewrite" url="/{R:1}/{R:2}.aspx?pid={R:3}&amp;title={R:4}" appendQueryString="false" />
</rule>