2012-10-13 27 views
25

我想mod_rewrite一个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规则/条件会使这种情况发生?

回答

49

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

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

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

+0

谢谢,我没有意识到这很简单。 –

+1

+1同意@DanielOakey ..我试图用正则表达式来破解一些东西,但它不工作.. –

+2

澄清,这不是关于重写与重定向。 http://httpd.apache.org/docs/current/rewrite/flags.html#flag_qsa说: 当替换URI包含查询字符串时,RewriteRule的默认行为是放弃现有的查询字符串,并将其替换与新生成的一个。使用[QSA]标志会导致查询字符串被合并。 –

相关问题