打开 URL 重写后,我遇到了一个关于 Javascript HTTP 请求的问题。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteCond %{THE_REQUEST} \ /(.+)\.php(\?|\ |$)
RewriteRule ^ /%1 [L,R=301]
xmlhttp.open("POST", "php/msg_send.php", true);
POST 方法根本不起作用,但是 xmlhttp.open("GET", "php/language_check.php?lang="+langSelect, true);
GET 方法继续像以前一样工作。
RewriteCond %{REQUEST_METHOD} POST
RewriteRule ^ - [L]
在我的 .htaccess 文件中添加此代码后,POST 方法开始运行良好。
我有点困惑,因为 GET 方法在打开 url 重写后工作正常,但 POST 方法没有。 xmlhttp GET 是否真的可以在不在 .htaccess 文件中添加一些行的情况下正常工作但 POST 方法不能?我希望有人能解释为什么 GET 方法在 url 重写(删除 .php 扩展名)后有效,但 POST 方法无效。
提前致谢。
最佳答案
原因是因为您正在重定向 R=301
并且当您重定向 POST 请求时,不能保证 POST 数据所在的请求主体与重定向一起发送。如果您使用 javascript 发送 POST,并且浏览器的 URL 地址栏没有改变,那么您根本不需要重写任何 POST 请求(因为我猜您的规则的目标是删除“php "来自您的 URL 的扩展名)。
您可以通过添加更多内容来清理您的规则:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
RewriteCond %{REQUEST_METHOD} !POST
RewriteCond %{THE_REQUEST} \ /(.+)\.php(\?|\ |$)
RewriteRule ^ /%1 [L,R=301]
关于javascript - URL 重写和 Javascript HTTP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26020019/