【问题标题】:Empty $_POST values with AJAX and RewriteEngine使用 AJAX 和 RewriteEngine 清空 $_POST 值
【发布时间】:2013-09-08 23:06:32
【问题描述】:

我在使用 Apache 的 Linux 服务器上遇到问题。每当我通过 AJAX POST 发布表单(或数据)时,POST 值似乎都是空的。我已经读过它可能是 .htaccess 文件有问题,但仍然没有找到解决方案。

我的 .htaccess:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

## hide .php extension
# To externally redirect /dir/foo.php to /dir/foo
RewriteCond %{THE_REQUEST} !/product\.php
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php [NC]
RewriteRule ^ %1 [R,L,NC]

RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=permanent,L]

## To internally redirect /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_URI} !/product\.php
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L]


在我的虚拟主机中:

<Directory /var/www/foldername>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>

我在浏览器中记录了表单数据,因此我知道发送到 AJAX 请求的数据不为空。 但是在需要处理POST请求和发送邮件的PHP文件中,POST值是空的。

这是我发布数据的方式:

var data = $('#frmContact').serializeArray();
$.ajax({
    type: "POST",
    url: "mail.php",
    data: data,
    success: function () {
        // success
    },
    error: function () {
        // problem
    }
});

有人有解决办法吗?提前致谢!

【问题讨论】:

  • 我添加了处理 AJAX 请求的代码。
  • 使用浏览器上可用的开发者工具的萤火虫,看看它在你提交请求时做了什么。
  • 我使用了 Chrome 开发者工具,在对 php 文件的 post 请求中,表单数据可用。 (gyazo.com/289aa185cea7ec632db1e0b43c866072)。我不知道我还应该寻找什么?
  • Offcourse,成功了!谢谢!我非常专注于在重写规则中寻找问题,以至于忘记了显而易见的......谢谢!

标签: php ajax apache post mod-rewrite


【解决方案1】:

您的问题是您正在重定向包含 .php 的 URL,一旦重定向将导致空 POST,您实际需要的是使用:

/mail

因为它将在内部重定向到 PHP 并保留发布数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多