将整个域重定向到 Apache 虚拟主机中另一个域上的单个页面

将整个域重定向到 Apache 虚拟主机中另一个域上的单个页面

关于将整个域重定向到另一个域的信息很多,但我找不到有关将域重定向到第二个域上的特定页面的任何已解答的问题。这是我设置的:

<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)重复此重定向。

相关内容