htaccess删除www并确保多个域的https

时间:2013-07-25 19:43:56

标签: .htaccess redirect https multiple-domains no-www

我正在尝试设置我的htaccess文件以完成以下两项操作:

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

现在这个文件控制着三个域名,但将来很容易就会有几十个域名,所以它需要具有可扩展性

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

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

但我在Safari中遇到以下错误:尝试打开“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>

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

2 个答案:

答案 0 :(得分:0)

如果其他人偶然发现了这一点 - 我重启Web服务器后,上面的代码实际上正在运行。不确定为什么这是必要的 - 但现在一切正常!

答案 1 :(得分:0)

我遇到了同样的问题,无法使用htaccess或启用站点的重写来找到解决方案。

相反,我了解到,尽管Letsencrypt不允许使用通配符,但它们将提供列出同一域的多个变体的证书。

运行certbot时,只需将“ -d mydomain.com -d www.mydomain.com”添加到certbot的cert generation命令中,它将引导您完成一个用于处理的SSL证书。 www和裸露版本都没有问题。在考虑这一问题时,似乎可以使用这种方法为各种子域生成一个证书,尽管我对此并不十分了解。

我发现无法通过编辑htaccess文件等使它正常工作。我相信出于其他原因,要获取.htaccess或启用了站点的conf文件,必须通过SSL要求验证。

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