You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

子目录中.htaccess文件无法生效的问题排查求助

解决子目录.htaccess不生效的问题

核心问题在于:你的.htaccess放在root/chartService目录下,但cURL请求的URL是/obesity-visualizer/chart/{bmi},Apache处理该请求时,只会从root/obesity-visualizer/(及上级目录)查找.htaccess文件,不会加载root/chartService/下的配置——因为这个目录和当前请求的路径没有关联。

修复方案

  1. 移动.htaccess到正确目录
    将root/chartService/.htaccess移动到root/obesity-visualizer/目录下(也就是请求URL/obesity-visualizer/...对应的物理根目录)。

  2. 调整.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。

  3. 验证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)验证。
  4. 测试与排查

    • 重启Apache服务使配置生效。
    • 查看Apache错误日志(通常在/var/log/apache2/error.log或Apache安装目录的logs/error.log),排查是否有重写规则相关的错误提示。
    • 在cURL请求中打印$httpCode,如果返回200则说明重写规则已生效,若为404则需检查路径匹配是否正确。

内容的提问来源于stack exchange,提问作者Ömer Dikyol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 23:55:28