【发布时间】:2011-03-12 00:44:04
【问题描述】:
我想知道如何使用 Apache mod_rewrite 选项将 www.site.com?lang=lv&type=1&mode=2 重写为 www.site.com/lv/1/2。
【问题讨论】:
标签: apache url mod-rewrite
我想知道如何使用 Apache mod_rewrite 选项将 www.site.com?lang=lv&type=1&mode=2 重写为 www.site.com/lv/1/2。
【问题讨论】:
标签: apache url mod-rewrite
假设您确实想将/lv/1/2 重写为?lang=lv&type=1&mode=2(我认为没有理由这样做)并且没有其他重写处于活动状态,这应该可以解决问题:
RewriteRule ^/([^/]*)/([^/]*)/([^/]*)$ ?lang=$1&type=$2&mode=$3 [L]
还有;如果您想将这些幻数包含在您的 URI 中,最好将它们替换为更有用的信息。
编辑:如果您确实想要做相反的事情,请参阅 Matt S 的答案。
【讨论】:
基本重写:
RewriteEngine On
RewriteRule http://www.site.com/?lang=(.+?)&type=(\d+?)&mode=(\d+?) http://www.site.com/$1/$2/$3 [L,R=permanent]
编辑:更改了重写标志以强制永久重定向
【讨论】:
site.com/lv/1/2的页面吗?你在使用某种框架吗?
您需要分别处理 URI 路径和查询。如果参数以相同的顺序出现,您可以这样做:
RewriteCond %{QUERY_STRING} ^lang=([^&]+)&type=([^&]+)&mode=([^&]+)$
RewriteRule ^$ /%1/%2/%3? [L,R=301]
否则,您需要在使用此规则之前将它们按正确的顺序排列,或者一次获取每个参数。
【讨论】:
RewriteEngine on?您想在哪里使用该规则?
/ 并且总是这三个 URL 参数都有一个值?