【问题标题】:Using htaccess to redirect all but ONE PAGE to https使用 htaccess 将除一页之外的所有页面重定向到 https
【发布时间】:2017-03-29 09:18:15
【问题描述】:

我有一个新网站,正在尝试将其设为 https。我在一页上嵌入了一个论坛。论坛没有https!因此,我需要通过 HTTP 而不是 HTTPS 提供一个页面。我正在使用标准的 htaccess 代码来强制所有页面转到 HTTPS。

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

我阅读了一些语法,但它非常复杂。我想我想对 RewriteCond 做点什么,因为从我读到的内容中,这将在它下面的规则中创建一个例外。

我的论坛在http://www.xxxx.xxx/forum.html

如何编写规则以使该页面异常?

【问题讨论】:

  • 你知道不重定向所有页面就不能使用HSTS,不使用HSTS就容易受到MitM/sslstrip攻击吗?

标签: apache .htaccess http https


【解决方案1】:

您可以在.htaccess 文件中使用以下规则。它的作用是首先检查 HTTPs 是否未打开,如果没有,则它将所有内容转发到 HTTPs,但目录 forum 除外。第二条规则检查 HTTPs 是否开启,如果开启则将 forum 重定向回 HTTP。

RewriteEngine On

RewriteCond %{HTTP:X-Forwarded-SSL} !on
RewriteCond %{REQUEST_URI} !^\/(forum)
RewriteRule (.*) https://%{HTTP_HOST}/$1 [L,R=301]

RewriteCond %{HTTP:X-Forwarded-SSL} =on
RewriteCond %{REQUEST_URI} ^\/(forum)
RewriteRule (.*) http://%{HTTP_HOST}/$1 [L,R=301]

确保在测试之前清除缓存。如果您对上述规则有问题,那么您还可以尝试以下方法:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} !^/forum
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} ^/forum
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

【讨论】:

  • 非常接近!我正在htaccess.mwl.be 上对其进行测试,我认为在第 4 行的末尾可能应该有一些东西,在 word 论坛后面。因为当我使用 url example.com/forum.html 进行测试时,测试页面不会返回结果。但是,伙计,你很好!你做了一些实际上非常接近的事情,这比我过去两周所做的要好得多!
  • 对该网站进行仔细的测试。它不兼容可与.htaccess 一起使用的所有功能。您最好通过您的服务器进行测试并将R=301 更改为R=302,以便它只是一个临时重定向。如果它对您有用,请将其改回 301 :)
  • 我从一开始就使用301(大约1周前)。所以也许最好将论坛网址更改为 forum1 或其他正确的东西,让旧网址“死”?该网站是全新的,我没有对其进行任何SEO,并且我认为还没有访问者,所以我不在乎杀死一页。
  • 在测试时始终使用302,以后会避免此类问题:) 所以是的,关闭页面是最简单的选择。虽然,我不会把它命名为forum1:P
  • 哇,它确实有效!真的很棒!非常感谢,你真的是大师!非常令人印象深刻!
猜你喜欢
  • 2011-11-04
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
  • 2015-09-21
相关资源
最近更新 更多