使用Apache mod_rewrite重写多个变量的规则

时间:2010-07-05 18:55:17

标签: apache url mod-rewrite

我想知道如何使用Apache mod_rewrite选项将www.site.com?lang=lv&type=1&mode=2重写为www.site.com/lv/1/2

3 个答案:

答案 0 :(得分:1)

假设您实际上想要将/lv/1/2重写为?lang=lv&type=1&mode=2(我认为没有理由相反)并且没有其他重写处于活动状态,这应该可以解决问题:

RewriteRule ^/([^/]*)/([^/]*)/([^/]*)$ ?lang=$1&type=$2&mode=$3 [L]

也;如果你想将它们包含在你的URI中,你最好用更有用的信息替换那些神奇的数字。

编辑:如果您真的想要这样做,请参阅Matt S的回答。

答案 1 :(得分:0)

基本重写:

RewriteEngine On
RewriteRule http://www.site.com/?lang=(.+?)&type=(\d+?)&mode=(\d+?) http://www.site.com/$1/$2/$3 [L,R=permanent]

编辑:更改了重写标记以强制执行永久重定向

答案 2 :(得分:0)

您需要单独处理URI路径和查询。如果参数以相同的顺序出现,则可以执行以下操作:

RewriteCond %{QUERY_STRING} ^lang=([^&]+)&type=([^&]+)&mode=([^&]+)$
RewriteRule ^$ /%1/%2/%3? [L,R=301]

否则,在使用此规则之前,您需要按正确的顺序放置它们,或者一次采用每个参数。