.htaccess:在所有页面上强制 www,在一个页面上强制 https,在所有其他页面上强制 http

Posted

技术标签:

【中文标题】.htaccess:在所有页面上强制 www,在一个页面上强制 https,在所有其他页面上强制 http【英文标题】:.htaccess: force www on all pages, force https on one page, force http on all other pages 【发布时间】:2013-01-22 07:13:10 【问题描述】:

我有这个网站,example.com。我想做的是在所有页面上强制 www,在一个页面上强制 https,在所有其他页面上强制 http。

我正在使用以下 .htaccess 代码将所有 http 流量重定向到 www:

#Redirect to www
RewriteCond %HTTP_HOST ^example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

在我的“表单”页面上设置 SSL:

#Force SSL on a specific directory
RewriteCond %ENV:HTTPS !on [NC]
RewriteCond %REQUEST_URI form
RewriteRule ^(.*)$ https://www.example.com/form/$1 [R,L]

问题是,当我点击 https://example.com/ 时,它不会像我想要的那样重定向到 www (https://www.example.com),尤其是 http 和 www (http://www.example.com)。我试过这个:

#Redirect SSL to www
RewriteCond %ENV:HTTPS on [NC]
RewriteRule ^(.*)$ http://www.example.com$1 [R=permanent,L]

但那是一个非常愚蠢的尝试并且没有奏效。我怎样才能同时完成这三个?

【问题讨论】:

【参考方案1】:

试试这个:

# Handle nonSSL
RewriteCond %HTTPS on 
RewriteRule !^/?form(/|$) http://www.ravicti.com%REQUEST_URI [L,R=301]

# Handle SSL 
RewriteCond %HTTPS off 
RewriteRule ^/?form(/|$) https://www.ravicti.com%REQUEST_URI [L,R=301]    

# Add the missing www for both HTTP and HTTPS
RewriteCond %HTTP_HOST ^ravicti.com$ [NC]
RewriteCond %HTTPS:s (on:(s)|off:s)
RewriteRule (.*) http%2://www.ravicti.com%REQUEST_URI [L,R=301]

【讨论】:

以上是关于.htaccess:在所有页面上强制 www,在一个页面上强制 https,在所有其他页面上强制 http的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 .htaccess 在除一个目录 /images 之外的所有 URL 上强制使用 HTTPS?

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

使用 .htaccess 强制 PDF 下载

通过 htaccess 强制非 www 和 https

apache_conf 在htaccess中强制使用HTTPS和WWW

使用 .htaccess 为 CloudFlare 用户强制使用 HTTPS 和非 WWW