【发布时间】:2016-03-20 10:01:14
【问题描述】:
我有这个.htaccess 文件:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
在正常处理 HTTPS 访问的同时,我能否强制所有 HTTP 访问尝试提供特定页面(例如 /https-required.html)?
这是我期望的行为示例,可以容忍一些变化(例如,如果/https-required.html 可以仅通过 HTTP 提供,这是可以接受的):
http://www.ex.com/ => http://www.ex.com/https-required.html
http://www.ex.com/valid-page.html => http://www.ex.com/https-required.html
http://www.ex.com/invalid-page.html => http://www.ex.com/https-required.html
http://www.ex.com/https-required.html => http://www.ex.com/https-required.html
https://www.ex.com/ => https://www.ex.com/
https://www.ex.com/valid-page.html => https://www.ex.com/valid-page.html
https://www.ex.com/invalid-page.html => https://www.ex.com/404.html
https://www.ex.com/https-required.html => https://www.ex.com/https-required.html
我希望将整个站点限制为 HTTPS,但为此我必须考虑 HTTP 访问尝试。我想我可以完全禁用 HTTP,比如
SSLRequireSSL
但这会给意外的 HTTP 访问带来痛苦的体验。这个问题的更常见的解决方案是简单地将http:// 重定向到https:// 类似
Redirect permanent / https://www.example.com
或
RewriteCondition %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
但我特别希望避免这种重定向。
【问题讨论】:
标签: .htaccess