通用非www到www,非http到https

时间:2012-01-19 16:28:24

标签: apache .htaccess mod-rewrite https

我的.htaccess文件的代码是我从这里获取的,并尝试根据我的理解来调整它.htaccess,但我似乎无法让它工作(或者浏览器可能已缓存它,但我似乎无法清除它。)

Options -Indexes
Options +FollowSymlinks

<IfModule mod_rewrite.c>

########## FORCE SSL ##########
RewriteEngine On
RewriteBase / 

# Non-secure requests to www.domain.com should redirect to https://www.domain.com
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\.%{HTTP_HOST} [NC]
RewriteRule ^(.*)$ https://www\.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

# All secure (HTTPS) traffic should redirect to https://www.domain.com
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\.%{HTTP_HOST} [NC]
RewriteRule ^(.*)$ https://www\.%{HTTP_HOST}/$1 [L,R=301] 

</IfModule>

我想把它作为通用的一个可能,所以我可以简单地将它复制并粘贴到我制作的任何网站,所以不需要每次都编辑它 - 我想我也可以用PHP做这个但我觉得它会很好如果.htaccess也在那里。

另一点是,如果我要访问www.domain.com/.htaccess,可以阅读.htaccess或者我是否需要在'拒绝所有'的事情中覆盖它?

2 个答案:

答案 0 :(得分:1)

RewriteCond的第二个参数必须是正则表达式,因此它不能包含变量。

尝试将以下内容添加到.htaccess文件中以代替您拥有的规则

#capture top level domain (.com or .co.uk)
RewriteCond %{HTTP_HOST} ([-_a-zA-Z0-9]+\.([a-zA-Z]{2,5}|co\.uk))$ [NC]
RewriteCond %{HTTP_HOST} (www\.)?(.+)$ [NC]
RewriteRule ^ - [E=MY_TLD:%2]

# Non-secure requests to www.domain.com should redirect to https://www.domain.com
RewriteCond %{HTTPS} off
RewriteRule ^ https://www\.%{ENV:MY_TLD}%{REQUEST_URI} [L,R=301] 

# All secure (HTTPS) traffic should redirect to https://www.domain.com
RewriteCond %{HTTPS} on
#if host does not start with www
RewriteCond %{HTTP_HOST} !^www\.[-_a-zA-Z0-9]+\.([a-zA-Z]{2,5}|co\.uk)$ [NC]
RewriteRule ^ https://www\.%{ENV:MY_TLD}%{REQUEST_URI} [L,R=301] 

答案 1 :(得分:0)

最短版本是:

RewriteEngine On
RewriteBase / 
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} (www\.)?(.+)$ [NC]
RewriteRule ^ https://www\.%2%{REQUEST_URI} [L,R=301] 

只有(有些)缺点是subdomain.example.com被重定向到www.subdomain.example.com