这就是我需要做的。
重定向sub1.domain1.co.uk
至sub2.domain2.com
重定向sub2.domain2.com
至sub2.domain2.com/sub-folder
这些都有效,但是这个无效:
直接导航至sub1.domain1.co.uk/sub-folder
不会重定向到sub2.domain2.com/sub-folder
。
这是我的重定向:
RedirectMatch ^/$ http://sub2.domain2.com/sub-folder
RewriteCond %{HTTP_HOST} ^sub1.domain1.co.uk$ [NC]
RewriteRule (.*) sub2.domain2.com/$1 [R=301,L]
答案1
您有几个潜在的问题,可以解释为什么一个有效,而另一个无效......
您正在混合使用 mod_alias (
RedirectMatch
) 和 mod_rewrite (RewriteRule
) 指令进行外部重定向。不同的模块在请求期间的不同时间执行并独立工作。这可能会导致令人困惑的冲突。如果您使用 mod_rewrite,那么始终使用 mod_rewrite 更安全。您使用的是 WordPress。因此,您有现有的 mod_rewrite 指令来路由请求。任何外部重定向都必须来自前任何 WP 路由指令。
RewriteRule (.*) sub2.domain2.com/$1 [R=301,L]
您还缺少替换中的方案(即http://
),因此这将被视为相对的并打破。
因此,以下内容应前任何现有的 WordPress 指令,位于文件顶部附近.htaccess
:
# Redirect sub2.domain2.com/ to sub2.domain2.com/sub-folder
RewriteCond %{HTTP_HOST} =sub2.domain2.com [NC]
RewriteRule ^$ http://sub2.domain2.com/sub-folder [R=301,L]
# Redirect sub1.domain1.co.uk/<anything> to sub2.domain2.com/<anything>
RewriteCond %{HTTP_HOST} =sub1.domain1.co.uk [NC]
RewriteRule (.*) http://sub2.domain2.com/$1 [R=301,L]