.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 子域?