【问题标题】:htaccess : redirection all subdomain to main https www domainhtaccess :将所有子域重定向到主 https www 域
【发布时间】:2017-04-22 12:08:55
【问题描述】:

我被困在使用 htaccess 重定向,混合了一些关于 htaccess 重定向的答案 [1] [2]

我的目标是将每个子域(不是 www)重定向到我的主域(以 https://www. 开头),保持 Request_URI(如指定文件夹)不变。

这是我所做的:

RewriteEngine On

RewriteCond %{HTTP_HOST} ^(.+)\.mydomain\.fr$ [NC]
# OR : RewriteCond .* ^(.+)\.%{HTTP_HOST}%{REQUEST_URI}$   [NC]

RewriteCond %{HTTP_HOST} !^www\.mydomain\.fr$  [NC]
RewriteRule ^ https://www.mydomain.fr%{REQUEST_URI} [L,R=301,QSA]

这个配置做重定向(强文本是错误的重定向):

交换 RewriteCond %{HTTP_HOST} !^www\.mydomain\.fr$ [NC]

RewriteCond %{HTTP_HOST} !^https://www\.mydomain\.fr [NC] 给了我一个重定向错误的错误。 我的想法是检查 HTTP_HOST 的格式是否为https://www.mydomain,如果没有重定向到带有请求信息的好 URL RewriteRule ^ https://www.mydomain.fr/%{REQUEST_URI}

为什么会有错误的重定向? 我是否必须编写 2 组 Condition 和 Rule 来首先检查子域,然后是 HTTPS ? (我目前正在尝试使用一个规则和多个条件进行重定向,这可能不是最佳做法)

编辑:我的目标是进行这些重定向:

提前感谢任何答案/想法。

编辑 2:

我已经在THIS 问题上尝试了 Larzan 的答案,它似乎做了我想做的事情,除了一件事:如果我在浏览器中的 URL 类似于 https://foobar.mydomain.fr,浏览器会向我显示一个关于安全,我必须接受风险,然后重定向到https://www.mydomain.fr。如何删除此警告?

#First rewrite any request to the wrong domain to use the correct one (here www.)
RewriteCond %{HTTP_HOST} !^www\.mydomain
RewriteRule ^(.*)$ https://www.mydomain.fr%{REQUEST_URI} [L,R=301]

#Now, rewrite to HTTPS:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

【问题讨论】:

  • https://foo.mydomain.fr => https://foo.mydomain.fr 是什么意思?两个 URL 相同,什么都没有发生?
  • 我已经编辑了我的问题以添加我想要的重定向。 @DusanBajic:我想禁止子域 foo。
  • @anubhava : 我想通过 httpS 而不是 http
  • stackoverflow.com/questions/37286178/… ,你需要有通配符证书
  • 好的,所以我需要更多的步骤来实现我想要的。谢谢你的回答!

标签: apache .htaccess redirect mod-rewrite


【解决方案1】:

用这条规则替换你的两条规则:

RewriteEngine On

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.mydomain\.fr$  [NC]
RewriteRule ^ https://www.mydomain.fr%{REQUEST_URI} [L,R=301,NE]

在完全清除浏览器缓存后测试更改。

【讨论】:

  • 嗨,这个解决方案修复了重定向www.mydomain.fr => https://www.mydomain.fr,但是如果我在我的资源管理器中输入:https://foobar.domain.fr,URL 仍然是相同的。输入的 URL 不以 www 开头,因此应该接受重定向。但似乎不是。 "www" != "foobar" 为什么 Apache 没有看到呢?谢谢
  • 此规则也适用于子域,但子域应指向与主域的 DocumentRoot 相同的目录。
  • 有没有办法重定向每个子域(通配符)?所以没有子域的目录声明,仅适用于主域。 (参见编辑 2)。谢谢
  • 好的,所以现在您的查询是How can i remove SSL cert warning 不幸的是,答案是您不能。原因是与浏览器的 SSL 握手发生在 Apache 加载任何模块以重定向/重写之前。由于您的 SSL 证书用于主域,因此访问 https://foobar.maindomain.fr 会引发此警告。避免此警告的唯一方法是使用通配符 SSL 证书,这通常比单个域的常规 SSL 证书昂贵。顺便说一句,您 EDIT 部分中的规则与我的单个重定向规则所做的完全相同。
  • 感谢您的回答,我会接受它,因为它会进行我想要的所有重定向,并且您解释了为什么我不能使用 SSL 子域。谢谢 唯一的区别是https://foobar.maindomain.fr在您的解决方案发出 SSL 警告后没有进行任何重定向,甚至接受了风险。 (我做了几次测试,没有缓存,但我要再测试一次)。
猜你喜欢
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 2015-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多