1

我正在尝试设置我的 htaccess 文件来完成以下两件事:

它需要删除www。来自任何域 它需要确保所有域都使用 https

目前这个文件控制了3个域,但未来可能很容易达到几十个,所以它需要可扩展

我在另一篇文章中找到了这个解决方案

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

但我在 Safari 中收到以下错误:尝试打开“<a href="https://example.co/" rel="nofollow">https://example.co/”时发生了太多重定向。如果您打开一个页面,该页面被重定向以打开另一个页面,然后该页面又被重定向以打开原始页面,则可能会发生这种情况。

此外,为了将所有 http 流量重定向到 https,我发现了以下代码:

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

但是当我访问http://example.co时,它会重定向到 localhost。

这是完整的代码,以防其他相关!

<IfModule rewrite_module>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1$1 [R=301,L]
RewriteCond %{REQUEST_URI} !^/css/ [NC]
RewriteCond %{REQUEST_URI} !^/img/ [NC]
RewriteCond %{REQUEST_URI} !^/modules/ [NC]
RewriteCond %{REQUEST_URI} !^/scripts/ [NC]
RewriteCond %{REQUEST_URI} !^/index.php [NC]
RewriteRule .* /index.php [L]
</IfModule>

任何帮助都会很棒 - 谢谢!

4

2 回答 2

0

万一其他人偶然发现了这一点——我上面的代码实际上在我重新启动网络服务器后就可以工作了。不知道为什么这是必要的 - 但现在一切正常!

于 2013-07-25T20:34:01.007 回答
0

我遇到了同样的问题,并且无法在 htaccess 或启用站点的情况下使用重写找到解决方案。

相反,我了解到 Letsencrypt 虽然不允许通配符,但会提供列出同一域的多个变体的证书。

运行 certbot 时,他们的证书管理工具只需将“-d mydomain.com -d www.mydomain.com”添加到 certbot 的证书生成命令中,它将引导您生成一个处理 www 的 SSL 证书和裸变体没有麻烦。在考虑它时,似乎可以使用这种方法为各种子域生成一个证书,尽管我不知道足以肯定地说这一点。

我发现通过编辑 htaccess 文件等无法使其工作。我相信由于其他地方给出的原因,要访问 .htaccess 或启用站点的 conf 文件,必须通过 SSL 验证的要求。

花了几天时间研究这个问题后,我很高兴能从 Letsencrypt 网站上解决这个问题。尽管在几周或几个月后,我预计 Letsencrypt 将提供通配符证书。

于 2018-06-21T18:41:09.913 回答