javascript - URL 重写和 Javascript HTTP 请求

标签 javascript php .htaccess xmlhttprequest

打开 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/

相关文章:

javascript - 如何将日期转换为正确的格式?

php - mysqli 持久连接

javascript - 自动完成 Vue Js

javascript - JS IE8,7,9 错误 'attr(..)' is null or not an object

java - 谷歌云消息和 MySQL 数据库

apache - 如何防止 Apache httpd (MAMP) 中的 http 文件缓存

php - 如何使用preg_replace和htaccess修改url?

php - 没有 URL 重写的元刷新

javascript - 使用 Javascript 更改 OnClick 事件

php - 无法在 php 中使用 MYSQL INSERT INTO