【问题标题】:Restrict HTTP access to single page with .htaccess使用 .htaccess 限制对单个页面的 HTTP 访问
【发布时间】: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


    【解决方案1】:

    你可以这样使用它:

    Options -MultiViews
    RewriteEngine On
    
    RewriteCond %{HTTPS} off
    RewriteRule !^https-required\.html$ /https-required.html [L,NC,R=302]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ index.php [L]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-07
      • 2023-03-15
      • 2015-12-03
      • 2011-01-02
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      • 2018-06-06
      相关资源
      最近更新 更多