.htaccess强制整个站点HTTPS,除了一些路径



我已经成功地通过。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]

现在我有一个问题,因为一些第三方服务使用POST url,如:

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

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

我想在^/agreg/方案的每个url上禁用这个"强制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

我在这里错过了什么?

谢谢你的帮助!

问题:

我想禁用这个"强制https"的东西在每个url与^/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被排除在第一条规则之外,但它在第二条规则中被重写。

解决方案:

假设预期的行为是从两个规则中排除任何包含字符串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条件。

相关内容

最新更新