如何在.htaccess的<If>语句中检测子字符串?
.htaccess 基于子字符串筛选实现HTTPS跳转配置方案
你当前的配置是完整匹配example.lan域名来区分本地和生产环境,要实现子字符串检测,可以利用Apache <If> 指令支持的strcontains()表达式函数,它能直接检测字符串是否包含指定子串。
修改后的配置示例(排除所有含.lan子串的域名)
如果要让所有包含.lan的本地域名(比如test.lan、example.lan)都不执行HTTPS跳转,其他域名强制跳转,配置如下:
<If "!strcontains(%{HTTP_HOST}, '.lan')"> # PRODUCTION SERVER - 强制HTTPS跳转 RewriteCond %{SERVER_PORT} 80 RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </If> <Else> # LOCAL DEVELOPMENT SERVER - 无跳转 </Else>
核心逻辑说明
strcontains(%{HTTP_HOST}, '.lan'):检测请求的域名是否包含.lan子串- 前面加
!表示取反,即不包含.lan的域名才执行内部的HTTPS跳转规则
其他子字符串匹配场景
如果需要匹配包含特定子串的域名(比如只对含example.com的域名跳转),可以直接写:
<If "strcontains(%{HTTP_HOST}, 'example.com')"> # 仅对包含example.com的域名强制HTTPS RewriteCond %{SERVER_PORT} 80 RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </If>
内容的提问来源于stack exchange,提问作者Camaleo
相关产品推荐
相关产品推荐

