GitHub Action中用wget时.htaccess单URL访问配置为何返回403?
问题分析与解决方案
你的.htaccess配置存在两处关键错误,导致GitHub Action的请求被403拒绝:
错误1:mod_authz_core配置逻辑矛盾且条件错误
在mod_authz_core.c的配置块中:
<RequireAll> Require all denied Require expr %{HTTP_HOST} -strmatch '*.github.com' </RequireAll>
<RequireAll>要求所有内部条件必须同时满足,但Require all denied直接拒绝所有请求,和后面的允许条件完全冲突,无论请求是什么都会返回403。%{HTTP_HOST}是请求的目标域名(即你的www.myurl.com),不是请求发起方的域名,用它来匹配github.com完全不符合需求——你需要限制的是请求来源,而非目标地址。
错误2:未正确识别GitHub Action的请求来源
GitHub Action的请求来自GitHub的服务器,你需要验证的是请求发起方的主机/IP,而非目标主机。旧配置中Allow from .github.com(在非mod_authz_core块)的逻辑是对的(通过反向解析IP检查域名是否以github.com结尾),但mod_authz_core块的条件完全偏离了需求。
修正后的.htaccess配置
# 针对旧版Apache(无mod_authz_core)的配置 <IfModule !mod_authz_core.c> Order deny,allow Deny from all Allow from .github.com </IfModule> # 针对新版Apache(有mod_authz_core)的配置 <IfModule mod_authz_core.c> Require all denied Require host github.com Require host .github.com </IfModule>
修正说明:
- 新版配置去掉了
<RequireAll>,改用Require all denied后紧跟允许条件(Apache会默认用逻辑或处理多个Require指令,即满足任一允许条件就放行)。 - 用
Require host github.com和Require host .github.com来匹配请求来源的主机域名(通过反向解析IP验证),这和旧版Allow from .github.com的逻辑一致,正确识别GitHub服务器的请求。
额外验证建议
如果修正后仍有问题,可以在GitHub Action的wget命令中添加--verbose参数,查看请求的头部信息,或者在服务器上检查访问日志,确认请求的来源IP是否能反向解析到github.com域名。
内容的提问来源于stack exchange,提问作者maidan
相关产品推荐
相关产品推荐

