.htaccess 重定向除单个域的 Root
.htaccess Redirect except for Root of a single domain
假设我有三个域:domain1.tld、domain2.tld 和 domain3.tld
所有请求都应重定向到新域。tld/new 除了 domain1.tld 的根目录。
但不幸的是我的例外不起作用:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain1\.tld$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain1\.tld$
RewriteRule ^/$ https://newdomain.tld/new [L,R=301]
RewriteCond %{HTTP_HOST} !^domain1\.tld$ [OR]
RewriteCond %{HTTP_HOST} !^www\.domain1\.tld$
RewriteRule ^(.*)$ https://newdomain.tld/new [R=301,L]
如果不是 RewriteRule
模式 ^/$
,您的第一条规则似乎会执行您试图阻止的特定重定向,永远不会匹配,所以第一条规则实际上没有做任何事情。
第二条规则不会将任何请求重定向到 domain1.tld
,因此,domain1.tld/
也不会被第二条规则重定向。
确保您没有看到缓存的响应。 301(永久)重定向由浏览器持久缓存,因此请始终先使用 302 进行测试以避免潜在的缓存问题。
一些额外的假设:
newdomain.tld
指向不同的服务器。
您不需要从 domain1.tld/
的页面提供任何静态资源(CSS、JS、图像等)- 因为这些将被重定向到 newdomain.tld
。例外仅适用于对文档根目录的请求。
试试这样:
RewriteEngine On
# Exception for "domain1.tld/"
RewriteCond %{HTTP_HOST} ^(www\.)?domain1\.tld [NC]
RewriteRule ^$ - [L]
# Everything else redirects to "newdomain.tld/new"
RewriteRule ^ https://newdomain.tld/new [QSD,R=301,L]
请注意 RewriteRule
模式 (第一个参数)匹配 URL-path,减去斜杠前缀。 IE。 ^$
(空 URL-path)匹配根。 (您只能在服务器上下文中使用 ^/$
。)
注意:您需要先清除浏览器缓存,然后再使用 302 进行测试。
假设我有三个域:domain1.tld、domain2.tld 和 domain3.tld
所有请求都应重定向到新域。tld/new 除了 domain1.tld 的根目录。 但不幸的是我的例外不起作用:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain1\.tld$ [OR]
RewriteCond %{HTTP_HOST} ^www\.domain1\.tld$
RewriteRule ^/$ https://newdomain.tld/new [L,R=301]
RewriteCond %{HTTP_HOST} !^domain1\.tld$ [OR]
RewriteCond %{HTTP_HOST} !^www\.domain1\.tld$
RewriteRule ^(.*)$ https://newdomain.tld/new [R=301,L]
如果不是 RewriteRule
模式 ^/$
,您的第一条规则似乎会执行您试图阻止的特定重定向,永远不会匹配,所以第一条规则实际上没有做任何事情。
第二条规则不会将任何请求重定向到 domain1.tld
,因此,domain1.tld/
也不会被第二条规则重定向。
确保您没有看到缓存的响应。 301(永久)重定向由浏览器持久缓存,因此请始终先使用 302 进行测试以避免潜在的缓存问题。
一些额外的假设:
newdomain.tld
指向不同的服务器。您不需要从
domain1.tld/
的页面提供任何静态资源(CSS、JS、图像等)- 因为这些将被重定向到newdomain.tld
。例外仅适用于对文档根目录的请求。
试试这样:
RewriteEngine On
# Exception for "domain1.tld/"
RewriteCond %{HTTP_HOST} ^(www\.)?domain1\.tld [NC]
RewriteRule ^$ - [L]
# Everything else redirects to "newdomain.tld/new"
RewriteRule ^ https://newdomain.tld/new [QSD,R=301,L]
请注意 RewriteRule
模式 (第一个参数)匹配 URL-path,减去斜杠前缀。 IE。 ^$
(空 URL-path)匹配根。 (您只能在服务器上下文中使用 ^/$
。)
注意:您需要先清除浏览器缓存,然后再使用 302 进行测试。