且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2023-02-23 08:22:31

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

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

我稍微改进了正则表达式以匹配标签",无论它在查询字符串中的位置如何,并保留特殊字符序列,例如 & 此外,它应该避免与相似参数的匹配(即:它不会匹配名为alttag"的参数).

编辑 #2: 另一种方法(尤其是当您必须过滤多个参数时)是使用外部程序进行重写.本页:http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritemap(特别是外部重写程序"部分)包含有用的信息.

I recently changed my CMS, and want to rewrite some of my URLs to match the new URL/query string parameter format.

The old URL was:

http://www.mysite.com/search.cgi?tag=foo&blog_id=bar&other=baz

The new URL should be:

http://www.mysite.com/?s=foo

In other words, there were several query string parameters in the old format, but I only care to rewrite the tag param to s while keeping the same value. The other parameters should be discarded. Of course the order of the parameters shouldn't matter. It also shouldn't matter whether tag is the only parameter or not.

Any ideas?

You can try to use regular expression and grouping, if your server supports that. If I am not mistaken you have to rewrite only one parameter, I guess you could try something like (if you are using apache with mod_rewrite):

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

Edit: I improved the regular expression a little bit to match "tag" regardless of its position in the query string and to preserve special characters sequences such as & In addition it should avoid matches with similar parameters (i.e.: it wouldn't match a parameter called "alttag").

Edit #2: An alternative (especially if you have to filter several parameters) is to use an external program to do the rewrite. This page: http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritemap (in particular the section "External rewriting program") contains useful information.