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

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。

Jon*_*uhn 5

重写和重定向之间有区别。

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中检查是否没有发布参数?您确定要调用期望的控制器吗?

  • 感谢您的澄清。在了解了重定向和重写之间的区别之后,我解决了我的问题。我检查了整个htaccess并发现有人对.htaccess文件顶部的每个请求强制执行301重定向规则 (3认同)