带参数url重写规则之.htaccess和web.config的写法

要求:把链接http://demo.com/list-2.html?cid=2&q=深圳 解析到http://demo.com/Topic/tlist?cid=2&q=深圳
适用场景:在网站用重写规则中某些链接和 form 表单的 get 提交时会用到。

  • 在 Apache 的.htaccess 中
1
2
3
4
RewriteCond %{QUERY_STRING} ^cid=(\d+)&q=(.*)$
RewriteRule list-(\d+)\.html$ Topic/tlist\?cid=$1&q=%2
RewriteCond %{QUERY_STRING} ^$
RewriteRule list-(\d+)\.html$ Topic/tlist\?cid=$1
  • 在 IIS 的 web.config 中
1
2
3
4
5
6
7
8
<rule name="带参数的url重写规则" >
<match url="list-(\d+)\.html" />
<conditions trackAllCaptures="true">
<add input="{QUERY_STRING}" pattern="&amp;?(cid=[^&amp;]+)&amp;?" />
<add input="{QUERY_STRING}" pattern="&amp;?(q=[^&amp;]+)&amp;?" />
</conditions>
<action type="Redirect" url="Topic/tlist?cid={R:1}&amp;{C:1}&amp;{C:2}" appendQueryString="false" />
</rule>

备:(action 里的 type 中”Redirect”为跳转,”Rewrite”为重写)