Kee*_*ood 5 php apache .htaccess mod-rewrite redirect
.htacesss
RewriteCond %{REQUEST_URI} ^/api/(.+)$
RewriteRule ^api/(.+)$ /index.php?api=%1 [QSA,L]
Run Code Online (Sandbox Code Playgroud)
示例Ajax网址请求:“ http://hostname.com/api/ext/list.php?query=de”
我希望能够将这种格式的网址重定向到以下index.php?api = {requested_filename}&param1 = value1&param2 = value2 ...
因为整个网站都是通过index.php中的引导过程来处理的,所以它的路由部分会加载配置,模板等...
例如,当我尝试使用jquery代码时,重定向后POST数据将丢失。
$.ajax({
url: '/api/contact.php',
type: 'POST',
data: {
email: $("#contactEmail").val(),
name: $("#contactName").val(),
message: $("#contactMessage").val()
// etc ...
}
});
Run Code Online (Sandbox Code Playgroud)
我了解到您无法在http重定向上保留数据。但是所有框架如何避免这种情况?我已经编写了很多代码,并且每个代码都通过index.php进行了引导,并且.htaccess文件中有重写规则以启用漂亮的url。因此,例如在Yii中,我将使用一些POST数据调用url“ api / uploads / latests.json”,后端的控制器将接收该数据。我在这里想念什么?
注意:我已经测试过[P] mod_rewrite参数,并且我认为此服务器未启用mod_proxy。
重写和重定向之间有区别。
Rewrite是一个apache(和其他服务器)模块,将遵循一组条件/规则将请求的url映射到服务器上的文件(例如:引导程序将所有url重写为单个文件,通常是index.php。mvc可能将/ model / controller / view uri映射到index.php,以调用相应的mvc文件)。
重定向实际上会更改您所在的页面。有人请求页面A.php,并且该页面显示“您正在寻找的内容在B.php上”,因此您的浏览器转到B.php。
重写将保留post参数,因为url不变。重写只会更改请求的脚本,但是对于浏览器来说,页面似乎仍然位于请求的URL处。
重定向将不会保留发布参数,因为服务器会将您完全重定向到另一个页面。
您试图执行的操作似乎是重写而不是重定向。获取post参数应该没有问题。
要解决此问题,您如何在index.php中检查是否没有发布参数?您确定要调用期望的控制器吗?
| 归档时间: |
|
| 查看次数: |
3839 次 |
| 最近记录: |