在.htaccess中使用[QSA]时为什么$ _POST为空?

时间:2011-01-19 08:24:08

标签: .htaccess mod-rewrite post qsa

我在.htaccess中有以下内容:

RewriteCond %{REQUEST_URI} !app/index\.php$
RewriteRule ^(.*\.htm)$ index.php?url=$0 [QSA,L]

Everyting工作得很好,但结果网址为空$ _POST。

我100%确定它是mod_rewrite错误,而不是HTML或PHP,因为当我将[QSA,L]更改为[L]时,效果很好。但我真的需要QSA。

它发生在大约30%的主机上,所以这可能是一些Apache配置选项。

3 个答案:

答案 0 :(得分:0)

以这种方式修改规则怎么样?它会改变什么吗?

RewriteRule ^(.*)\.htm$ index.php?url=$0.htm [QSA,L]

答案 1 :(得分:0)

默认情况下,..也许apache没有启用mod_rewrite,请尝试在控制台上输入

sudo a2enmod rewrite

示例我的.htaccess

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
  ErrorDocument 404 /index.php
</IfModule>

答案 2 :(得分:-1)

我确实遇到过这个问题。它适用于一台服务器,而不是下一台。至少可以说是烦人且费时的!

经过大量检查后使用这个php:

foreach ($_REQUEST AS $key => $value) echo $value."<br>";

在index.php的顶部,检查从htaccess文件发送的值是什么(以及我不会进入的许多其他检查!)我最终发现你需要指定“RewriteBase”

RewriteBase /添加到htaccess文件的顶部,使其可以在我尝试过的所有服务器上运行。

(另请,请记住设置为:RewriteBase /folder-where-file-is/ 其中“folder-where-file-is”是index.php文件的位置,如果在子文件夹中)

希望它可以帮助你 - 知道这肯定会在很多个小时前帮助我!