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

子目录下.htaccess的ErrorDocument跳转如何适配本地与线上环境

方案1:相对路径适配(最简方案)

直接删除原配置中路径开头的根路径标识/,非根路径开头的地址会自动相对于.htaccess所在目录解析,无需修改即可同时适配本地子目录和线上根目录环境:

ErrorDocument 404 alert.php?error=404
ErrorDocument 403 alert.php?error=403
ErrorDocument 401 alert.php?error=401

注意:如果站点存在多级嵌套路径访问,相对路径会相对于当前访问的URI目录解析,可能出现文件找不到的问题,该场景推荐使用方案2。

方案2:环境变量条件判断(兼容性最佳)

通过判断当前访问的主机名自动切换路径规则,Apache 2.4及以上版本可直接使用:

# 识别本地开发环境
SetEnvIf Host "^(localhost|127\.0\.0\.1)$" is_local=1

<If "env('is_local') == 1">
    # 本地环境配置,替换为对应站点的子目录路径即可
    ErrorDocument 404 /Site1/alert.php?error=404
    ErrorDocument 403 /Site1/alert.php?error=403
    ErrorDocument 401 /Site1/alert.php?error=401
</If>
<Else>
    # 线上环境配置
    ErrorDocument 404 /alert.php?error=404
    ErrorDocument 403 /alert.php?error=403
    ErrorDocument 401 /alert.php?error=401
</Else>

方案3:重写规则动态匹配

低于2.4版本的Apache可以使用mod_rewrite实现自适应跳转:

RewriteEngine On
# 404场景:请求的文件/目录不存在时重写到当前站点根目录的alert.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ /Site1/alert.php?error=404 [L]

# 其他错误码配置
ErrorDocument 403 /Site1/alert.php?error=403
ErrorDocument 401 /Site1/alert.php?error=401

部署到线上时只需要把路径中的站点子目录前缀删除即可,也可以配合部署脚本自动替换,无需手动修改。


内容的提问来源于stack exchange,提问作者JS77

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:27:02