.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/