mod_rewrite不会在Apache 2.4上保留$ _POST变量

时间:2014-01-02 10:06:13

标签: php apache .htaccess mod-rewrite

mod_rewrite没有传递我的$ _POST变量,GoDaddy向我保证这是因为我需要改变Apache 2.4的设置。

这是我的代码:

的.htaccess

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L]

的index.php

<?php
  $q = explode("/", $_SERVER['REQUEST_URI']);
  if ($q[1] != "") {
    switch($q[1]) {
      case "test":
        include("test.php");
        break;
    }
  }
?>

test.php的

<?php
  if (isset($_POST["submitButton"])) {
    echo "Submitted";
  } else {
    echo "Not submitted";
  }
?>
<form method="post">
  <input type="submit" name="submitButton">
</form>

通过/ test提交时,显示“未提交” 通过/test.php提交时,显示“已提交”。

我在另一台主机上尝试过这种确切的设置,它运行正常。

为了让它发挥作用需要改变什么?

2 个答案:

答案 0 :(得分:1)

test.php的顶部试试这个。然后,如果这不起作用,请在index.php的顶部尝试。

<?php
    $rebuiltPost = array();
    parse_str(file_get_contents("php://input"),$rebuiltPost);
    $_POST = $rebuiltPost;
?>

答案 1 :(得分:0)

发生这种情况的原因是,当URL不是可识别的文件时,GoDaddy的设置将用户指向missing.html

修复方法是通过将.htaccess添加到您自己的Options -Multiviews文件来忽略GoDaddy的.htaccess文件。