【问题标题】:.htaccess force whole site https except some path.htaccess 强制整个站点 https 除了某些路径
【发布时间】:2013-03-06 00:08:58
【问题描述】:

我已经设法通过 .htaccess 使用以下规则在 https 中切换我的所有网站:

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

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /app.php [QSA,L]

现在我遇到了一个问题,因为一些 3rd 方服务使用 POST url,例如:

http://sub.mydomain.com/agreg/sms/service

被拒绝,因为它们被重定向并且现在 GET。

我想使用^/agreg/ 方案在每个网址上禁用此“强制 https”功能。我试过了

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

但是现在有重定向到http://sub.mydomain.com/app.php

我错过了什么?

非常感谢您的帮助!

【问题讨论】:

    标签: apache .htaccess https url-rewriting


    【解决方案1】:

    问题:

    我想在每个网址上禁用这个“强制 https”的东西 ^/agreg/ 计划。我试过了

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

    但是现在有重定向到http://sub.mydomain.com/app.php


    嗯,根据规则,这是一个有效的结果。

    第二条规则将所有内容重定向到app.php。这个:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ /app.php [QSA,L]
    

    虽然传入的 URL http://sub.mydomain.com/agreg/sms/serviceSo,例如,被排除在第 1 条规则之外,但它在第 2 条规则中被重写。

    解决方案:

    假设预期的行为是从 BOTH 规则中排除任何包含字符串 agreg 的 URL,它应该是这样的:

    RewriteCond %{HTTPS} off [NC]
    RewriteCond %{REQUEST_URI} !/agreg        [NC]
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,QSA]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !/agreg        [NC]
    RewriteRule ^(.*)$ /app.php [QSA,L]
    

    重写条件仅对下一条规则有效。需要在最后一个规则块中添加相同的 NOT 条件。

    【讨论】:

    • 嗨@faa,感谢您的回答!乍一看,这似乎是正确的。 ^/agreg 没有被 https 捕获。但我也需要它被第二条规则抓住。我正在运行 Symfony2 框架,^/agreg/something 不是真正的路径,而是由 Symfony2 路由器在 app.php 上解释的东西。所以,我的问题是我需要它来访问 app.php,而不是重写 url as app.php 我是克莱尔还是不是? ;)
    • 是的。那你想在浏览器的地址栏中显示什么?
    • 根据您的规则,/agreg/whatever 将保留在 bar 中。但不是内部定向到 /app.php (处理请求)。所以我在这些 url 上找不到 404。
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2012-07-11
    • 2015-01-08
    • 1970-01-01
    • 2011-05-10
    • 2023-03-29
    • 2011-06-11
    • 1970-01-01
    相关资源
    最近更新 更多