【问题标题】:Can't get htaccess rule to work: force SSL on all pages, force non-SSL on two specific pages无法使 htaccess 规则起作用:在所有页面上强制使用 SSL,在两个特定页面上强制使用非 SSL
【发布时间】:2015-07-08 21:51:32
【问题描述】:

我不是 htaccess 专家,但谷歌搜索了两个小时后我放弃了。或许你能帮帮我?

我的整个网站都使用 SSL。但是,我有两个页面引用了其他地方的非安全动态内容。我需要这些在http 而不是https

我的规则的第一部分有效。除这两个页面外,所有站点都强制使用 SSL。但是,最后一部分没有:强制这两个页面使用非 SSL。这可能很愚蠢,但有人知道我哪里出错了吗?

#add www. if missing  WORKS
RewriteEngine on
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [L,R=301]

#force SSL/https WORKS
RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !^/webshop2/localize\.php
RewriteCond %{REQUEST_URI} !^/webshop2/layoutstripper\.php
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

#force http DOES NOT WORK
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} ^/webshop2/localize\.php [NC]
RewriteCond %{REQUEST_URI} ^/webshop2/layoutstripper\.php [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

【问题讨论】:

    标签: apache .htaccess


    【解决方案1】:

    您的第二个 SSL 规则中需要一个 [OR] 标志。您基本上说的两个条件:

    • 请求必须是 HTTPS
    • URI 必须以开头:/webshop2/localize.php
    • URI必须以开头:/webshop2/layoutstripper.php

    如您所见,最后两个条件总是会失败,因为请求不能同时是 BOTH。如果您在其中添加 [OR] 标志,则如果 URI 是一个或另一个,则它是正确的:

    RewriteCond %{HTTPS} on
    RewriteCond %{REQUEST_URI} ^/webshop2/localize\.php [NC,OR]
    RewriteCond %{REQUEST_URI} ^/webshop2/layoutstripper\.php [NC]
    RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    

    【讨论】:

    • 我太笨了! 30 年的编程经验,我不能否定 AND。谢谢!!!!
    猜你喜欢
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    相关资源
    最近更新 更多