繁体   English   中英

使用 Apache 虚拟主机中的 mod_rewrite 将子域 + http 重定向到 https

[英]Redirect subdomains + http to https using mod_rewrite in Apache Virtual Host

我有一个具有 1 个名称和 2 个别名的虚拟主机name.domain.com.bralias1.domain.com.bralias2.domain.com.br 我需要将别名12重定向到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM