Xampp环境Hugo静态站配置.htaccess后AJAX请求报403错误如何解决
你当前遇到403错误的核心原因是你编写的.htaccess规则逻辑完全错误:
- 规则中的
[F]标记是Apache的内置标记,作用就是直接返回403 Forbidden响应 - 你配置的逻辑是「只要请求是POST方法、且请求路径包含subscribe.php,就直接返回403」,完全和你需要的放行subscribe.php请求的需求相反。
你最初ajax请求无法触发,大概率是因为静态站默认的重写规则会把所有非静态文件的请求都重定向到index.html,导致发送到subscribe.php的POST请求被拦截,没有落到实际的PHP文件上。
正确的.htaccess配置示例
<IfModule mod_rewrite.c> Options +FollowSymLinks RewriteEngine On # 第一步:先放行subscribe.php的所有请求,不做重写 RewriteCond %{REQUEST_URI} ^/subscribe\.php$ RewriteRule .* - [L] # 第二步:剩下的非真实存在的文件/目录请求,才重写到index.html适配Hugo路由 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.html [L] </IfModule>
额外注意事项
你在AJAX中设置了contentType: 'application/json',PHP默认的$_POST全局变量无法解析JSON格式的请求体,你需要在subscribe.php中用以下方式获取请求参数:
<?php header('Content-Type: application/json'); // 读取原始请求体 $rawData = file_get_contents('php://input'); $requestData = json_decode($rawData, true); $email = $requestData['email'] ?? ''; // 后续自行编写邮箱校验、存储等逻辑
另外请确认你的XAMPP Apache配置中,对应站点目录的AllowOverride参数设置为All,否则.htaccess文件不会生效。
内容的提问来源于stack exchange,提问作者Prashant
相关产品推荐
相关产品推荐

