如何编写适配Localhost和Production环境的独立规则Htaccess文件
你可以通过Apache原生的条件判断指令实现单.htaccess适配双环境,以下是两种常用的可行方案:
方案1:基于环境变量标记(更稳定,推荐)
先在本地Apache的全局配置或者站点虚拟主机配置中加入一行定义,标记本地环境:Define LOCAL_ENV 1
生产环境的Apache不需要添加这行配置。之后直接在.htaccess中用<IfDefine>指令区分规则即可:
# 仅本地环境生效的规则块 <IfDefine LOCAL_ENV> # 此处填写你本地需要的所有htaccess规则 # 示例:本地不强制HTTPS、添加调试响应头 Header set X-Run-Env "Localhost" RewriteEngine On RewriteCond %{HTTPS} on RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] </IfDefine> # 仅生产环境生效的规则块 <IfDefine !LOCAL_ENV> # 此处填写你生产环境需要的所有htaccess规则 # 示例:强制HTTPS、开启HSTS Header set X-Run-Env "Production" RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains" </IfDefine>
方案2:基于访问域名判断(无需改Apache配置)
如果不想修改本地Apache配置,可以直接通过判断当前访问域名区分环境,要求Apache版本≥2.4:
# 本地环境规则,匹配本地常用域名,可自行修改正则添加你本地的测试域名 <If "%{HTTP_HOST} =~ /^(localhost|127\.0\.0\.1|.*\.test|.*\.local)$/"> # 填写本地专属规则 Header set X-Run-Env "Localhost" # 示例:本地关闭静态资源缓存方便调试 <FilesMatch "\.(html|css|js|png|jpg)$"> Header set Cache-Control "no-store, no-cache, must-revalidate" </FilesMatch> </If> # 生产环境规则 <Else> # 填写生产专属规则 Header set X-Run-Env "Production" # 示例:生产开启静态资源长缓存 <FilesMatch "\.(css|js|png|jpg|webp)$"> Header set Cache-Control "public, max-age=31536000, immutable" </FilesMatch> </Else>
注意事项
- 两种方案二选一即可,推荐优先使用方案1,不会因为生产域名变更出现规则误判问题
- 所有放在对应条件块内的规则只会在匹配对应环境时生效,完全符合你需要的逻辑
内容的提问来源于stack exchange,提问作者Ren Jitsm
相关产品推荐
相关产品推荐

