我想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规则/条件将使这种情况发生?
最佳答案
您需要添加 [QSA]
flag(“查询字符串追加”)
RewriteRule ^apps/([A-Za-z0-9-_]+)/?$ index.php&app=$1 [L,QSA]
对于使用
[R]
标志的页面301重定向(而不是像这样的内部重写),查询字符串将自动附加。但是,必须使用[QSA]
强制进行内部重写。关于apache - 如何才能mod_rewrite并保留查询字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12873137/