我发现了许多这样的问题并尝试了几乎所有但都失败了。我最新的代码是:
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证书,有没有办法向用户显示自定义消息?
实际上,当浏览器显示默认警告消息时,许多非技术用户会感到震惊。
答案 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]
我添加了^
,$
和/
,因为否则nosecure
或authority
等请求也会重定向到HTTPS。
永远不要在启用301
的情况下进行测试,请参阅此回答Tips for debugging .htaccess rewrite rules了解详细信息。