在我的项目中,我的/PropertDetail.aspx可以获得2个查询字符串。
PropertyId/PropertDetail.aspx?PropertyId=5
的第一个第一个
第二一个用于语言/PropertDetail.aspx?PropertyId=5&Language=2
编辑:,此页面可以获取其中一个或者可以同时获取它们,因此我的重写规则需要同时处理它们
所以,我已将这些规则设置为web.config
<rewriter>
<rewrite url="^(/.+(\.gif|\.png|\.jpg|\.ico|\.pdf|\.css|\.js)(\?.+)?)$" to="$1" processing="stop" />
<rewrite url="^/(.+)-(.+).aspx$" to="/PropertyDetail.aspx?PropertyId=$2" processing="stop"/>
<!--http://localhost:1562/Harika-Gayrimenkul-5.aspx-->
<rewrite url="^/(.+)-(.+)-(.+).aspx$" to="/PropertyDetail.aspx?PropertyId=$2&Language=$3" processing="stop"/>
<!--http://localhost:1562/Great-Property-5-2.aspx-->
</rewriter>
如果没有语言查询字符串就可以了,但是当有一个语言查询字符串时,它会将第三个表达式作为 PropertyId 而不是语言
如何为同一页面定义这两个规则?
谢谢
答案 0 :(得分:3)
综合答案:
<rewriter>
<rewrite url="^(/.+(\.gif|\.png|\.jpg|\.ico|\.pdf|\.css|\.js)(\?.+)?)$" to="$1" processing="stop"/>
<rewrite url="^.+?([\d]+?)-([\d]+?)\.aspx$" to="/PropertyDetail.aspx?PropertyId=$1&Language=$2" processing="stop"/>
<rewrite url="^.+?-([\d]+?)\.aspx$" to="/PropertyDetail.aspx?PropertyId=$1" processing="stop"/>
</rewriter>
对于许多组合而言,现在效果很好:
/This-is-a-really-long-property-title-555-12
返回PropertyId = 555和Language = 12.
/This-is-another-really-long-property-title-666
返回PropertyId = 666。
答案 1 :(得分:2)
通过添加问号,使匹配中的第二个参数(语言值)可选:
编辑:这是一个更正后的版本,是在我意识到我误解了这个问题之后做出的。
<rewriter>
<rewrite url="\.(?:gif|png|jpg|ico|pdf|css|js)(?:\?.*)?$" to="$0" processing="stop"/>
<rewrite url="(\d+)(?:-?(\d+)?)\.aspx$" to="/PropertyDetail.aspx?PropertyId=$1&Language=$2" processing="stop"/>
</rewriter>
这是OP工作的清理和简化版本。它将以
的形式产生输出/PropertyDetail.aspx?PropertyId=12345&Language=1 (when language is present) /PropertyDetail.aspx?PropertyId=12345&Language= (when it isn't)
请注意
答案的原始版本:
<rewriter>
<rewrite url="^/(.+?)-(.+?)-?(.+?)?\.aspx$" to="/PropertyDetail.aspx?PropertyId=$2&#038;Language=$3" processing="stop"/>
</rewriter>
答案 2 :(得分:1)
这是我们提出的最终解决方案。
<rewriter>
<rewrite url="^(/.+(\.gif|\.png|\.jpg|\.ico|\.pdf|\.css|\.js)(\?.+)?)$" to="$1" processing="stop"/>
<rewrite url="^.+?([\d]+?)-([\d]+?)\.aspx$" to="/PropertyDetail.aspx?PropertyId=$1&Language=$2" processing="stop"/>
<rewrite url="^.+?-([\d]+?)\.aspx$" to="/PropertyDetail.aspx?PropertyId=$1" processing="stop"/>
</rewriter>
非常感谢您的帮助 teknohippy 和 JasonMArcher