. h访问次数
RewriteCond %{REQUEST_URI} ^/api/(.+)$
RewriteRule ^api/(.+)$ /index.php?api=%1 [QSA,L]
示例 AJAX 请求:“主机名称”
我希望能够重定向此格式的网址到以下索引。php?API={requested_filename}¶m1=value1¶m2= value 2...
因为整个站点是通过index.php中的 Bootstrap 处理的,index.php中有一个加载配置、模板等的路由部分。
例如,当我尝试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”,后端的控制器会接收到这些数据。
注意:我已经测试了**[P]**mod_rewrite参数,我认为这个服务器没有启用mod_proxy。
3条答案
按热度按时间d6kp6zgx1#
重写和重定向是有区别的。
Rewrite是一个Apache(和其他服务器)模块,它将遵循一组条件/规则将请求的URLMap到服务器上的文件(例如: Bootstrap 将所有URL重写到单个文件(通常为index.php)。MVC可以将/model/controller/viewURIMap到调用适当MVC文件的index.php)。
重定向实际上改变了你所访问的页面,有人请求访问A.php页面,而该页面显示“what you are looking is on B.php”,于是你的浏览器转到B.php。
重写将保留post参数,因为url没有改变。重写将只改变所请求的脚本,但对于浏览器来说,页面看起来仍然存在于所请求的url中。
重定向不会保留post参数,因为服务器会将您完全重定向到另一个页面。
看起来你正在尝试做的是重写,而不是重定向。你应该没有问题获得后参数。
要解决这个问题,你如何检查index.php中没有post参数?你确定你所期望的控制器被调用了吗?
r1zhe5dt2#
所有POST数据在重定向时丢失。无法通过htaccess重写/重定向规则保留它。
客户端(我知道的所有主流浏览器)接收到的重定向(所有301、302、303)被当作一个新的URL来进行GET请求,浏览器不会自动将旧的post参数附加到这个URL--即使重定向的源是一个POST请求。
我所找到的唯一解决方法是重写内部代码,将POST参数转换为GET参数,并将它们粘贴在新url的末尾。在php中,您可以发出一个头位置更改(或任何您选择的库使用的重定向调用):
am46iovg3#
对于任何有这个问题的人,我也有同样的问题,我用这样的东西
这将不工作与 AJAX 后,我不得不改变重写规则
在PHP文件中,我有