子目录中.htaccess文件无法生效的问题排查求助
解决子目录.htaccess不生效的问题
核心问题在于:你的.htaccess放在root/chartService目录下,但cURL请求的URL是/obesity-visualizer/chart/{bmi},Apache处理该请求时,只会从root/obesity-visualizer/(及上级目录)查找.htaccess文件,不会加载root/chartService/下的配置——因为这个目录和当前请求的路径没有关联。
修复方案
移动
.htaccess到正确目录
将root/chartService/.htaccess移动到root/obesity-visualizer/目录下(也就是请求URL/obesity-visualizer/...对应的物理根目录)。调整
.htaccess规则
修改后的.htaccess内容如下:<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /obesity-visualizer/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^chart/([^/]+)/?$ chartService/index.php?bmi=$1 [QSA,L] RewriteRule ^chart/([^/]+)/([^/]+)/?$ chartService/index.php?bmi=$1&year=$2 [QSA,L] </IfModule>关键改动:把RewriteRule目标路径开头的
/去掉,因为RewriteBase已经指定了/obesity-visualizer/,相对路径会自动拼接成正确的目标地址/obesity-visualizer/chartService/index.php。验证Apache配置
- 确保
root/obesity-visualizer/对应的<Directory>块中设置了AllowOverride All,而不仅仅是根目录的配置:<Directory "/path/to/root/obesity-visualizer"> AllowOverride All Require all granted </Directory> - 确认
mod_rewrite模块已启用,可以通过执行apache2ctl -M | grep rewrite(Linux)或查看Apache配置文件中的LoadModule rewrite_module行(Windows)验证。
- 确保
测试与排查
- 重启Apache服务使配置生效。
- 查看Apache错误日志(通常在
/var/log/apache2/error.log或Apache安装目录的logs/error.log),排查是否有重写规则相关的错误提示。 - 在cURL请求中打印
$httpCode,如果返回200则说明重写规则已生效,若为404则需检查路径匹配是否正确。
内容的提问来源于stack exchange,提问作者Ömer Dikyol
相关产品推荐
相关产品推荐

