我有两个应用程序在同一台服务器上,并使用Apache重写规则redirect:
除了一种情况外,一切正常,
请求www.test2.test.euredirect到https://www.test1.com内容
我怎样才能正确识别它?
在域test1.comconfiguration文件中重写 :
ServerName 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.euconfiguration文件中重写 :
ServerName 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}
任何build议非常赞赏。
亲切的问候。
我认为你的第一个vritualhostconfiguration是作为主机不匹配“test1.com”和“test2.test.eu”的任何请求的默认。 尝试添加此ServerAlias行,看看它是否得到请求去正确的configuration文件。
在域test2.test.euconfiguration文件中重写:
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”应该由这个configuration处理。 ServerAlias上带有星号的第二项提供了一个通配符,所以即使请求来自“wwww.test2.test.eu”或“xxx.test2.test.eu”,正确的apacheconfiguration也会处理它。 通过使用通配符,您实际上可以忽略第一个条目,如下所示:
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}
它应该是一样的,虽然你的第一次重写不会捕获非'''主机名。