.htaccess将https重定向到http,除了一页以及www到非www

时间:2014-02-24 14:08:52

标签: .htaccess mod-rewrite

在我的某个域名上我正在使用htaccess

RewriteCond %{SERVER_PORT} ^443$  [OR]
RewriteCond %{HTTPS} on [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule (.*) http://example.com/$1 [R=301,L] 

将所有https重定向到http以及将www重定向到非www域。

现在,我希望secure.php页面使用https协议而不是http协议,同时将www重定向到非www。

我可以用下面的线来实现这个......

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

RewriteCond %{HTTPS} off
RewriteCond %{SCRIPT_FILENAME} \/secure\.php [NC]
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{SCRIPT_FILENAME} !\/secure\.php [NC]
RewriteRule (.*) http://%{HTTP_HOST}/$1 [R=301,L] 

在我的第一个htaccess中,如果用户访问https://www.example.com,则会在单个重定向中重定向到http://example.com

修改安全的secure.php页面后,在第二个htaccess上考虑用户访问http://www.example.com/secure.php - >重定向到http://example.com/secure.php的情况 - >重定向到https://example.com/secure.php 在这里我得到两个重定向。

请建议我如何使用[OR]在我的第一个htaccess中标记我的标准,因此在所有情况下它都使用最多一个重定向来到达最终页面。

1 个答案:

答案 0 :(得分:0)

尝试:

RewriteCond %{REQUEST_URI} !^/secure\.php
RewriteCond %{HTTPS} on [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule (.*) http://example.com/$1 [R=301,L] 

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(secure\.php.*) https://example.com/$1 [R=301,L]