htaccess重写不要传递查询字符串

时间:2013-03-10 14:55:24

标签: php apache .htaccess mod-rewrite get

我的htaccess

中有以下规则
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .+ redirect.php [L]
RewriteRule ^(.*)\.(?!js|css|png)([^.]*)$ redirect.php [L]

一切都很完美,除了一件事,即查询 由于某种原因,查询串消失...

我收到了以下网址myweb.com/subscribe?email=blablabla 在redirect.php中我有以下一行:

echo $_GET['email']; //should echo the email

它并没有回应任何东西......
*我检查过它是否重写为redirect.php

任何想法为什么以及如何解决它?

1 个答案:

答案 0 :(得分:0)

通过以下步骤解决:

  1. 我不想重写css,js,png等文件,所以在我的最后一条规则中,它被包含在正则表达式中 - 我将它拆分了。
  2. 将[QSA]标志添加到最后两条规则
  3. 已添加RewriteCond %{REQUEST_FILENAME} !-f
  4. RewriteCond %{REQUEST_FILENAME} -d更改为RewriteCond %{REQUEST_FILENAME} !-d
  5. 它的外观如下:

    RewriteEngine on
    RewriteBase /
    RewriteRule \.(ico|css|png|js|txt|xml)$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .+ redirect.php [QSA,L]
    RewriteRule ^(.*)$ redirect.php [QSA,L]