【问题标题】:Using .htaccess to force either HTTP or HTTPS使用 .htaccess 强制使用 HTTP 或 HTTPS
【发布时间】:2010-03-30 15:31:57
【问题描述】:

我已经有这段代码可以强制这些 URL 使用 HTTPS:

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

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/login/?.*$
RewriteCond %{REQUEST_URI} ^/logout/?.*$
RewriteCond %{REQUEST_URI} ^/register/?.*$
RewriteCond %{REQUEST_URI} ^/newsletter/?.*$
RewriteCond %{REQUEST_URI} ^/reset-password/?.*$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

这确实很好用,但我想做的是强制任何符合上述条件的URL到HTTP,触发301。

我不想创建HTTP 页面列表并像上面的HTTPS 那样重定向它们。除非我以某种方式更改系统,否则安全页面 URL 将始终保持不变,但我可以在需要时更新它们。非安全页面可以由这里的一些销售团队动态创建/编辑,因此需要智能定位。

对我如何做到这一点有任何想法吗? 必须使用.htaccess 来完成,我一直通过在我们的 PHP 框架中处理它来实现这一点,但这会导致非常严重的性能问题以及我们的 Google 抓取问题。

干杯!

【问题讨论】:

    标签: http .htaccess https


    【解决方案1】:

    对 Seidr 的回答进行了修改,因为实际上您只想在 HTTPS 开启时重定向,而当您希望它关闭时(此外,没有 %{HTTP} 变量)。再一次,把它放在你所有的规则之后。

    RewriteCond %{HTTPS} on
    RewriteCond %{REQUEST_URI} !^/login/?.*$
    RewriteCond %{REQUEST_URI} !^/logout/?.*$
    RewriteCond %{REQUEST_URI} !^/register/?.*$
    RewriteCond %{REQUEST_URI} !^/newsletter/?.*$
    RewriteCond %{REQUEST_URI} !^/reset-password/?.*$
    RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    

    虽然还没有测试过,所以不是 100% 可以工作。

    编辑:需要安全页面的条件,以便它们仍处于 HTTPS 模式。

    【讨论】:

    • 好的,我明白了,我的 HTTPS RewriteRule 上的 L 标志表示,如果那里有匹配项并且我们正在使用 HTTP,那么我们会重定向,这是处理的最后一条规则。但是,如果我们已经在使用 HTTPS 怎么办?它会忽略我的原始条件并重定向回 HTTP...不是吗?
    • 事实上,当我测试它时,它从不将任何东西重定向到 HTTPS,总是重定向到 HTTP。
    • 你是对的,你将不得不为安全页面添加一个条件(需要一些重复)。见编辑。
    • 您还需要为第一组规则添加条件。
    • Righto,我想我的 .htaccess 中有一个小错误,所以我会解决这个问题并尝试您的选择...干杯 Kazar!
    【解决方案2】:

    当您在那里的规则中使用 L 标志时,您应该能够只使用如下所示的 RewriteCond 将在先前条件中未捕获的任何请求重写为 HTTP?将其放在您发布的规则之后。这似乎有点太明显了,但它可能会起作用。

    RewriteCond %{REQUEST_URI} ^.*$
    RewriteCond %{HTTP} OFF
    RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [L]
    

    【讨论】:

    • 我不太确定这是否能解决问题 - 我太累了,无法确定!希望它可以为您指明正确的方向。
    • 我明天下班回来试试,回来汇报!谢谢:D
    猜你喜欢
    • 2012-05-08
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 2013-05-31
    • 2017-08-22
    • 2017-06-15
    相关资源
    最近更新 更多