使用.htaccess中选定的查询字符串参数重写URL

msh*_*rir 8 apache .htaccess url-rewriting

我最近更改了我的CMS,并希望重写我的一些URL以匹配新的URL /查询字符串参数格式.

旧的URL是:

http://www.mysite.com/search.cgi?tag=foo&blog_id=bar&other=baz
Run Code Online (Sandbox Code Playgroud)

新网址应为:

http://www.mysite.com/?s=foo
Run Code Online (Sandbox Code Playgroud)

换句话说,旧格式中有几个查询字符串参数,但我只关心将标签参数重写为s,同时保持相同的值.其他参数应该被丢弃.当然,参数的顺序无关紧要.标签是否是唯一的参数也无关紧要.

有任何想法吗?

小智 10

如果您的服务器支持,您可以尝试使用正则表达式和分组.如果我没有弄错你只需要重写一个参数,我想你可以尝试类似的东西(如果你在mod_rewrite中使用apache):

RewriteCond %{QUERY_STRING} ^.*(\btag\b=(\w+|&\w+;)+)
RewriteRule ^(.+) /$1?%1 [L]

编辑:我改进了正则表达式以匹配"tag",无论它在查询字符串中的位置如何,并保留特殊字符序列,例如&另外它应该避免与类似参数的匹配(即:它不匹配参数叫做"alttag").

编辑#2:另一种选择(特别是如果必须过滤几个参数)是使用外部程序进行重写.此页面:http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritemap(特别是"外部重写程序"部分)包含有用的信息.

  • 是的,%1用于表示RewriteCond中的组,而$ 1用于表示RewriteRule指令中的组. (2认同)