关于将整个域重定向到另一个域的信息很多,但我找不到有关将域重定向到第二个域上的特定页面的任何已解答的问题。这是我设置的:
<VirtualHost *:80>
ServerName www.domain2.org.uk
ServerAlias domain2.org.uk domain1.co.uk www.domain1.co.uk
DocumentRoot /var/www/html
ErrorLog logs/mkt-error_log
CustomLog logs/mkt-access_log common
RewriteEngine On
RewriteCond %{HTTP_HOST} !domain1.co.uk$ [NC]
RewriteRule ^(.*)$ https://www.domain2.org.uk/specific-page/ [L,R=301]
</VirtualHost>
这确实会重定向,但只是重定向到 domain2 的默认页面。我该如何更改它,以便转到特定页面?
答案1
RewriteRule ^(.*)$ https://www.domain2.org.uk/specific-page/ [L,R=301]
这已经满足了你的要求并重定向一切至https://www.domain2.org.uk/specific-page/
- 如上所述RewriteRule
代换。 (虽然RewriteRule
图案不必要地捕获反向引用。)
RewriteCond %{HTTP_HOST} !domain1.co.uk$ [NC]
但是(除非这是示例代码片段中的拼写错误),条件(检查标题Host
是否不是以...结尾domain1.co.uk
)将导致重定向循环(domain2.org.uk
显然不是 domain1.co.uk
,因此条件始终满足)。以下RewriteRule
重定向一切。
这条件模式此RewriteCond
指令中的 需要通过以下方式进行更改:
- 删除
!
(否定)前缀。(尽管结尾$
仍会导致以点结尾的 FQDN 出现问题。) - 或者,更改为
!domain2\.org\.uk$
但是...由于您显然有权访问服务器配置,并且正在虚拟主机上下文,您实际上不应该为此使用 mod_rewrite。您应该创建一个单独的 vhost,一个用于domain1
,另一个用于domain2
,并使用 mod_aliasRedirectMatch
指令……更不容易出错,效率更高。
例如:
<VirtualHost *:80>
ServerName domain1.org.uk
ServerAlias www.domain1.org.uk
RedirectMatch 301 ^ https://www.domain2.org.uk/specific-page/
</VirtualHost>
<VirtualHost *:80>
ServerName domain2.org.uk
ServerAlias www.domain2.org.uk
DocumentRoot /var/www/html
ErrorLog logs/mkt-error_log
CustomLog logs/mkt-access_log common
</VirtualHost>
注意:这些虚拟主机仅适用于 HTTP(端口 80),因此您自然需要对 HTTPS(端口 443)重复此重定向。