移除URL中.php后缀后AJAX POST请求出现404找不到URL问题
解决AJAX POST请求因.htaccess移除.php后缀导致的404问题
这个404问题的根源很明确:你用.htaccess去掉了URL的.php后缀,但只做了外部请求(浏览器地址栏)到无后缀URL的重定向,却没配置无后缀URL到对应.php文件的内部转发——你的AJAX请求giveView其实对应的是giveView.php,但服务器不知道要去找这个文件,所以返回404。
修复步骤:
1. 补全.htaccess的规则,添加内部转发逻辑
你需要在现有规则基础上,加上把无后缀请求映射到对应.php文件的规则。完整的.htaccess配置如下:
RewriteEngine On # 除非是真实目录,否则移除URL末尾的斜杠 RewriteCond %{REQUEST_FILENAME}!-d RewriteRule ^([^/]+)/$ http://localhost/myWebsite/$1 [R=301,L] # 将浏览器发起的带.php后缀的请求重定向到无后缀URL(保持地址栏干净) RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.php\s [NC] RewriteRule ^ %1 [R=301,L] # 核心:内部转发无后缀请求到对应的.php文件(解决AJAX 404的关键) RewriteCond %{REQUEST_FILENAME}!-d RewriteCond %{REQUEST_FILENAME}.php -f RewriteRule ^(.*)$ $1.php [L]
2. 验证文件路径正确性
确保你的服务器上确实存在文件:/style-faq/includes/handlers/ajax/giveView.php,注意路径的大小写(Linux服务器区分大小写,Windows不区分)。
3. 测试规则是否生效
直接在浏览器地址栏访问http://localhost/style-faq/includes/handlers/ajax/giveView,如果能正常返回PHP脚本的响应(比如JSON数据),说明规则已经生效,此时AJAX请求也能正常找到目标URL了。
额外注意事项:
- 确保Apache的
mod_rewrite模块已经开启(在httpd.conf中找到LoadModule rewrite_module modules/mod_rewrite.so,去掉前面的注释) - 如果你网站的根目录不是
/myWebsite,建议把重定向规则中的硬编码路径改成动态路径,避免迁移时出错:RewriteRule ^([^/]+)/$ http://%{HTTP_HOST}/$1 [R=301,L] - AJAX请求尽量使用相对路径(比如
./includes/handlers/ajax/giveView),避免因域名或根目录变化导致路径错误。
内容的提问来源于stack exchange,提问作者Thidal
相关产品推荐
相关产品推荐

