【问题标题】:Why $_POST is empty when using [QSA] in .htaccess?为什么在 .htaccess 中使用 [QSA] 时 $_POST 为空?
【发布时间】:2011-06-11 14:42:15
【问题描述】:

我在 .htaccess 中有以下内容:

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

一切都很好,但结果 URL 的 $_POST 为空。

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

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

【问题讨论】:

  • 您能否检查一下 $_REQUEST 中是否有任何可用的内容(包括 $_GET 和 $_POST) - 我很想知道您的 $_POST 值是否正在转换为 $_GET 值...
  • 是的,我已经检查过了。 $_REQUEST 只填充了 $_GET 值
  • 在查询中让我困惑几次的是 $0 而不是 $1

标签: .htaccess mod-rewrite post qsa


【解决方案1】:

默认情况下,.. 可能 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>

【讨论】:

  • 它没有回答这个问题。问题是使用 [QSA] 时 POST 参数会丢失。
【解决方案2】:

我确实遇到了这个问题。它在一台服务器上运行,然后在下一台服务器上运行。至少可以说是烦人和耗时!

使用这个 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 文件的位置(如果在子文件夹中)

希望它对您有所帮助 - 知道这肯定会在许多小时前帮助我!

【讨论】:

  • 这不是问题的解决方案。
【解决方案3】:

以这种方式修改您的规则怎么样。有什么改变吗?

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

【讨论】:

  • 奇怪。根据服务器版本,服务器之间是否存在差异?还是随机发生的?
猜你喜欢
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
  • 2013-05-04
  • 1970-01-01
  • 2010-09-18
  • 2019-12-04
  • 2017-08-07
  • 1970-01-01
相关资源
最近更新 更多