[英]Redirect subdomains + http to https using mod_rewrite in Apache Virtual Host
我有一个具有 1 个名称和 2 个别名的虚拟主机name.domain.com.br
, alias1.domain.com.br
和alias2.domain.com.br
我需要将别名1
和2
重定向到name
,但它不能完全工作,这是我当前的代码:
ServerName name.domain.com.br
ServerAlias alias1.domain.com.br
ServerAlias alias2.domain.com.br
DocumentRoot ****************
ErrorLog ****************
CustomLog ****************
RewriteEngine on
RewriteCond %{SERVER_NAME} =alias1.domain.com.br [OR]
RewriteCond %{SERVER_NAME} =alias2.domain.com.br [OR]
RewriteRule ^/(.*)$ https://name.domain.com.br [L,R=301]
However, this way the redirecting is only working when using http://aliasX.domain.com.br
and for some reason it puts two slashes at the end of the link, getting https://name.domain.com.br//
。 使用https://
时不起作用。
我希望所有有或没有 https 的变体都重定向到https://name.domain.com.br
。
你能帮助我吗?
RewriteCond %{SERVER_NAME} =alias1.domain.com.br [OR] RewriteCond %{SERVER_NAME} =alias2.domain.com.br [OR] RewriteRule ^/(.*)$ https://name.domain.com.br [L,R=301]
使用“https://”时不起作用。
HTTP 和 HTTPS 需要两个单独的虚拟主机容器。
毫无疑问,您已经将这些规则放在虚拟主机中,仅适用于 HTTP,例如。 <VirtualHost *:80>
。 您还需要在 HTTPS 的虚拟主机中重复重定向。 例如。 <VirtualHost *:443>
。 (尽管 HTTP vHost 中的重定向可以简化,因为您只需要将所有内容重定向到 HTTPS - 请参阅下面的解决方案。)
但是,您发布的规则不正确。 由于最后一个条件( RewriteCond
指令)上的错误OR
标志,重定向总是会发生,实际上是无条件的。
您还丢弃了 URL 路径并重定向到主页? (浏览器更正了丢失的斜杠。)我认为这是一个错误,您应该将alias1.domain.com.br/foo
重定向到name.domain.com.br/foo
,而不是name.domain.com.br/
/C502D102EC550Zbr/C504?DA
出于某种原因,它在链接末尾添加了两个斜杠
这不是由这个规则引起的。 一定有别的东西在这样做。
所以,解决方案就变成了......
###
### HTTP (not secure)
###
<VirtualHost *:80>
ServerName name.domain.com.br
ServerAlias alias1.domain.com.br
ServerAlias alias2.domain.com.br
DocumentRoot ****************
ErrorLog ****************
CustomLog ****************
# Redirect everything to HTTPS and canonical domain
# No need for mod_rewrite, a simple mod_alias Redirect will suffice
Redirect 301 / https://name.domain.com.br/
</VirualHost>
###
### HTTPS (secure)
###
<VirtualHost *:443>
ServerName name.domain.com.br
ServerAlias alias1.domain.com.br
ServerAlias alias2.domain.com.br
DocumentRoot ****************
ErrorLog ****************
CustomLog ****************
# Other SSL directives here...
# Redirect to the canonical domain
RewriteEngine On
RewriteCond %{HTTP_HOST} !=name.domain.com.br [NC]
RewriteRule ^ https://name.domain.com.br%{REQUEST_URI} [R=301,L]
</VirualHost>
HTTPS
vHost 中的重定向检查该请求是否尚未针对规范主机名,而不是检查它是否是别名之一。
注意:检查请求的主机名时,请使用HTTP_HOST
而不是SERVER_NAME
。 默认情况下它们是相同的,但是,根据服务器配置, SERVER_NAME
可能引用ServerName
指令的值,而不是客户端请求的主机名。
您需要在测试之前清除浏览器缓存,因为任何错误的 301(永久)重定向都将被缓存。 首先使用 302(临时)重定向进行测试,以避免潜在的缓存问题。
如上所述,如果您仍然在 URL 路径的开头看到双斜杠,那么其他东西正在这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.