apache 重写规则,非 www,https

apache 重写规则,非 www,https

我在同一台服务器上有两个应用程序,并使用 apache 重写规则进行重定向:

  • www 请求到非 www
  • http 请求转为 https

一切正常,除了一种情况:
请求 www.test2.test.eu 重定向到https://www.test1.com内容

我该如何正确配置它?


重写域 test1.com 配置文件
服务器名称 test1.com
RewriteCond %{HTTP_HOST} ^www.test1.com$ [NC]
RewriteRule ^(.*)$https://www.test1.com/1美元[R=301]

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https:// %{SERVER_NAME}%{REQUEST_URI}


重写域 test2.test.eu 配置文件
服务器名称 test2.test.eu
RewriteCond %{HTTP_HOST} ^www.test2.test.eu$ [NC]
RewriteRule ^(.*)$https://www.test2.test.eu/1美元[R=301]

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https:// %{SERVER_NAME}%{REQUEST_URI}

非常感谢您的任何建议。
诚挚的问候。

答案1

我认为您的第一个 vritualhost 配置是针对不匹配“test1.com”和“test2.test.eu”的主机上的任何请求的默认配置。尝试添加此 ServerAlias 行,看看它是否将请求发送到正确的配置文件。

在域 test2.test.eu 配置文件中重写:

ServerName test2.test.eu
ServerAlias www.test2.test.eu *.test2.test.eu
RewriteCond %{HTTP_HOST} ^www.test2.test.eu$ [NC]
RewriteRule ^(.*)$ https://www.test2.test.eu/$1 [R=301]

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https:// %{SERVER_NAME}%{REQUEST_URI}

这明确地告诉 apache,对“www.test2.test.eu”的请求应该由此配置处理。ServerAlias 上带有星号的第二个条目提供了一个通配符,这样即使请求来自“wwww.test2.test.eu”或“xxx.test2.test.eu”,正确的 apache 配置也会处理它。使用通配符,您实际上可以省略第一个条目,如下所示:

ServerName test2.test.eu
ServerAlias *.test2.test.eu
RewriteCond %{HTTP_HOST} ^www.test2.test.eu$ [NC]
RewriteRule ^(.*)$ https://www.test2.test.eu/$1 [R=301]

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*$ https:// %{SERVER_NAME}%{REQUEST_URI}  

并且它应该以相同的方式工作,尽管您的第一次重写无论如何都不会捕获非“www”主机名。

相关内容