.htaccess使用RewriteCond排除指定域名的301重定向配置问题
配置问题说明
你当前的配置逻辑完全错误,现有规则是只有访问domain4.com(含www前缀)时才会触发跳转到x1x1x1.com,和你的需求完全相反。
实现方案说明
两种实现方式都可以,但更推荐用RewriteCond做域名匹配,可读性更高、符合mod_rewrite的常规使用逻辑:RewriteRule默认仅匹配请求路径,要实现域名排除硬写在RewriteRule中反而需要额外调用服务器变量,没有必要。
正确配置示例
方案1:排除指定域名(所有非domain4的域名都跳转)
<IfModule mod_rewrite.c> RewriteEngine on # 否定匹配domain4的两种域名形式,NC代表忽略大小写 RewriteCond %{HTTP_HOST} !^domain4\.com$ [NC] RewriteCond %{HTTP_HOST} !^www\.domain4\.com$ [NC] # 末尾的$1用于保留原请求路径,不需要保留可删除直接写https://x1x1x1.com/ RewriteRule ^(.*)$ https://x1x1x1.com/$1 [R=301,L] </IfModule>
方案2:精准匹配需要跳转的域名(更严谨,避免后续新绑定域名误跳转)
如果仅需要domain1、domain2、domain3三个域名跳转,其余所有域名都不跳转,用以下规则更可控:
<IfModule mod_rewrite.c> RewriteEngine on # 同时匹配三个域名的带/不带www前缀形式 RewriteCond %{HTTP_HOST} ^(www\.)?(domain1|domain2|domain3)\.com$ [NC] RewriteRule ^(.*)$ https://x1x1x1.com/$1 [R=301,L] </IfModule>
调试注意事项
测试阶段建议先把R=301改为R=302临时重定向,确认规则完全生效后再改回301,避免浏览器缓存旧的错误规则,导致调试异常。
内容的提问来源于stack exchange,提问作者ponline
相关产品推荐
相关产品推荐

