36

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

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 规则/条件会导致这种情况发生?

4

1 回答 1

70

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

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

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

于 2012-10-13T12:40:34.043 回答