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