使用htaccess重写维护查询字符串

时间:2014-04-01 18:13:29

标签: php apache .htaccess mod-rewrite

我有一个htaccess,可以将除3个特定文件夹中的网址之外的任何网址重定向到处理显示网页的php文件:

Options +FollowSymLinks  
RewriteEngine On  
RewriteCond %{REQUEST_URI} !^/app [NC]
RewriteCond %{REQUEST_URI} !^/templates [NC]
RewriteCond %{REQUEST_URI} !^/downloads [NC]
RewriteCond %{THE_REQUEST} \ /+([^\ \?]*)
RewriteRule (.*)$ ./app/index.php?url=%1 [L,B]

但问题是,网址中的任何查询信息都会丢失。我想知道是否有可能保留它。

例如:

mysite.com/test?page=1 would become /app/index.php?page=1&url=test

而不是(现在发生的事情):

mysite.com/test?page=1 becomes /app/index.php?url=test

1 个答案:

答案 0 :(得分:1)

您只需要QSA标志:

Options +FollowSymLinks  
RewriteEngine On  
RewriteCond %{REQUEST_URI} !^/app [NC]
RewriteCond %{REQUEST_URI} !^/templates [NC]
RewriteCond %{REQUEST_URI} !^/downloads [NC]
RewriteCond %{THE_REQUEST} \ /+([^\ \?]*)
RewriteRule (.*)$ ./app/index.php?url=%1 [L,B,QSA]

QSA(查询字符串追加)标志在添加新查询参数时保留现有查询参数。