我如何mod_rewrite和保持查询字符串?

时间:2012-10-13 12:33:03

标签: apache .htaccess mod-rewrite query-string

我想将一个URL mod_rewrite到另一个页面,但我还希望保留添加的任何查询字符串。

RewriteEngine On

#enforce trailing slashes
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !#
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://localhost/siteroot/$1/ [L,R=301]

RewriteRule ^apps/([A-Za-z0-9-_]+)/?$ index.php&app=$1

因此,如果用户访问apps/app1/,则会显示index.php?app=app1。 但是,我希望能够保留可选的查询字符串,以便访问apps/app1/?variable=x返回index.php?app=app1&variable=x

什么mod_rewrite规则/条件会使这种情况发生?

1 个答案:

答案 0 :(得分:54)

您需要添加[QSA] flag(“查询字符串追加”)

RewriteRule ^apps/([A-Za-z0-9-_]+)/?$ index.php&app=$1 [L,QSA]

对于第301页,使用[R]标志重定向而不是像这样的内部重写,将自动追加查询字符串。但是,您必须使用[QSA]强制进行内部重写。