仅将一些页面从http重定向到https

时间:2013-03-07 13:02:25

标签: .htaccess

我发现了许多这样的问题并尝试了几乎所有但都失败了。我最新的代码是:

RewriteCond %{HTTPS} !^on$
RewriteCond %{REQUEST_URI} (/page_1|/page_2|/page_3|/page_3)$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]

我想将http重定向到https仅针对这些页面(page_1 - page_4)

最初看起来似乎有效,但是一旦我使用 https 到达page_1并点击任何其他(请说 page_my_http_1 )链接,该链接不应该是 https < / strong>它还会重定向到该页面的https( page_my_http_1 )。

我也尝试过:

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} (auth|register|secure)
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301]

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !(auth|register|secure)
RewriteRule ^(.*)$ http://%{SERVER_NAME}%{REQUEST_URI} [R=301]  

或者,如果未在浏览器上激活SSL证书,有没有办法向用户显示自定义消息?

实际上,当浏览器显示默认警告消息时,许多非技术用户会感到震惊。

1 个答案:

答案 0 :(得分:0)

我稍微改变了你的例子,但基本上它只是起作用

RewriteEngine on

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/(?:auth|register|secure)$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R]

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !^/(?:auth|register|secure)$
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R]

我添加了^$/,因为否则nosecureauthority等请求也会重定向到HTTPS。

永远不要在启用301的情况下进行测试,请参阅此回答Tips for debugging .htaccess rewrite rules了解详细信息。