对使用 .htaccess 输入的任何 URI 强制使用 SSL 和 www 子域?

Posted

技术标签:

【中文标题】对使用 .htaccess 输入的任何 URI 强制使用 SSL 和 www 子域?【英文标题】:Forcing SSL & www subdomain for any URI entered with .htaccess? 【发布时间】:2010-10-08 21:09:23 【问题描述】:

我有一个我们称为 example.com 的网站的“www”子域的 SSL 证书。

因此我可以强制使用 SSL,但如果用户没有在浏览器中输入“www.example.com”,则 SSL 证书将显示为无效。

我希望在网站根目录的 .htaccess 文件中使用 mod_rewrite 规则来完成此操作。

无论用户输入什么 URI,(例如 example.com、www.example.com、https://example.com、example.com/folder/file.html 等),我都想强制 HTTPS www 子域,当然保留他们提供的任何 URI。

我在玩弄 .htaccess 文件和一些规则,因为我已经做了一些研究,但我对 mod_rewrite 或 .htaccess 没有太多经验。我想我找到了几乎对我有用的 SVN 修订版,但并不完全。这里是:

RewriteEngine On
RewriteCond %HTTPS off
RewriteRule (.*) https://%HTTP_HOST%REQUEST_URI
RewriteCond %HTTP_HOST ^example.com [nc]
RewriteRule ^(.*)$ https://www.example.com/$1 [r=301,nc]

尽量不要对我的文件笑得太厉害;它主要来自我在网上找到的示例。

任何指针表示赞赏! =)

【问题讨论】:

另外:使用 example.com 作为示例域(已为您修复) 【参考方案1】:

试试这个:

RewriteCond %HTTPS !on [OR]
RewriteCond %HTTP_HOST !^www\.example\.com$ [NC]
RewriteRule ^ https://www.example.com%REQUEST_URI [R=301]

【讨论】:

从您的原始文件修改(在 RewriteRule 行中有 %HTTP_HOST,我看到您已经修复了)效果很好:RewriteRule ^ example.com%REQUEST_URI [R=301]

以上是关于对使用 .htaccess 输入的任何 URI 强制使用 SSL 和 www 子域?的主要内容,如果未能解决你的问题,请参考以下文章

Apache htaccess:如果 REQUEST_URI 与 cookie 值不匹配,则拒绝

.htaccess force ssl排除一些网址)

使用 .htaccess 对子域强制使用 SSL HTTPS

使用 htaccess 将请求 uri 重定向到镜像站点

.htaccess 结合 301 重定向和 URI 重写

如何从子域重定向到其他域URI?