2013-04-10 33 views
0

我有以下URL重写我正在尝试创建。通用Web.Config重写删除查询字符串并添加URL seo slug

<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个斜线的网址,我希望重写规则将其选中并将其转换为网址。

所以事件的

铜厚的URL将是有效的。

这将转化为

/1/1.aspx?pid=1 &标题= 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

我认为有几个问题。第一个是你已经发现你自己的{R:0}的使用。 {R:0}与整个URL匹配为{R:1}{R:2}等匹配的片段。因此,在这种情况下,你必须使用{R:1}{R:2}

的另一个问题是,你可能犯了一个错误使用?p={R:3}而不是?pid={R:3}。最后也可能是500错误的原因是你没有正确的XML编码&title中的和号应该是&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> 
+0

完美,是固定的问题。我还必须添加一些条件来防止重写检测到服务器上的实际文件。\t \t \t \t \t <条件logicalGrouping = “MatchAll”> <添加输入= “{REQUEST_FILENAME}” 使用MatchType = “IsDirectory” 否定= “真”/> <添加输入= “{REQUEST_FILENAME}” 使用MatchType =” IsFile“negate =”true“/> matwonk 2013-04-10 21:27:14