php - 如何在 .htaccess 重定向后通过 ajax 请求保留 POST 数据?

标签 php apache .htaccess mod-rewrite redirect

.htacesss

RewriteCond %{REQUEST_URI} ^/api/(.+)$
RewriteRule ^api/(.+)$ /index.php?api=%1 [QSA,L]

ajax url 请求示例: 'http://hostname.com/api/ext/list.php?query=de'

我希望能够将这种格式的 url 重定向到以下 index.php?api={requested_filename}¶m1=value1¶m2=value2 ...

因为整个站点是通过 index.php 中的 Bootstrap 处理的,它有一个路由部分加载配置、模板等...

例如,当我尝试使用 jquery 代码时,POST 数据在重定向后丢失。

$.ajax({
            url: '/api/contact.php',
            type: 'POST',
            data: { 
                email: $("#contactEmail").val(),
                name: $("#contactName").val(),
                message: $("#contactMessage").val()
                                // etc ...
            }
});

我读到您无法在 http 重定向上保留数据。但是所有框架如何避免这种情况呢?我编写了很多代码,每个代码都是通过 index.php 引导的,并且 .htaccess 文件中有重写规则以启用漂亮的 url。因此,例如在 Yii 中,我会调用带有一些 POST 数据的 url“api/uploads/latests.json”,后端的 Controller 将接收该数据。我在这里缺少什么?

注意:我已经测试了[P] mod_rewrite 参数,我认为这个服务器没有启用mod_proxy。

最佳答案

重写和重定向是有区别的。

Rewrite 是一个 apache(和其他服务器)模块,它将遵循一组条件/规则将请求的 url 映射到服务器上的文件(例如: Bootstrap 将所有 url 重写到单个文件,通常是 index.php。 mvc 可能会将/model/controller/view uri 映射到调用适当 mvc 文件的 index.php。

重定向实际上会更改您所在的页面。有人请求页面 A.php,该页面显示“您要查找的内容在 B.php 上”,因此您的浏览器转到 B.php。

重写将保留 post 参数,因为 url 不会改变。重写只会更改请求的脚本,但对于浏览器来说,页面看起来仍然存在于请求的 url 中。

重定向不会保留发布参数,因为服务器会将您完全重定向到另一个页面。

您尝试做的似乎是重写,而不是重定向。获取发布参数应该没有问题。

要解决这个问题,您如何在 index.php 中检查没有 post 参数?您确定正在调用您期望的 Controller 吗?

关于php - 如何在 .htaccess 重定向后通过 ajax 请求保留 POST 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13886631/

相关文章:

php - 我如何更改此脚本,以便当它发现用户存在于 MySQL 数据库中时它会更新并且不返回错误消息?

php - Backbone +RequireJS : HTML files loaded with RequireJS are interpreted as JS files

linux - 使用 CentOS 6 对 WHM 进行 DDOS 攻击

apache - 如何解决 Apache 未应用我的重写规则的问题?

php - 使用 PHP 检查网站是否启用了 Gzip

php - php同时上传的最大文件数

PHP - 两个多选下拉菜单,将用户选择传递给 MySQL 查询

javascript - 如何使用 JavaScript 将数据插入 Yii 框架 2.0 CKEditor 扩展?

apache - apache上的vue-router,子目录下的SPA,只能通过redirect访问页面

php - 如何在所有到达服务器的 HTTP 请求中包含一个 php 脚本