我需要强制一切除了IE8到HTTPS和IE8专门用于HTTP (这是暂时的 - 因此302 - 它是愚蠢的,但有合法的商业原因)。
我希望所有这些都忽略/api/
目录,因为使用这些目录的应用程序可能无法跟踪重定向。
以下是工作,IE8检测工作正常。一切都, /api/whatever
仍然被重定向。
我真的很感激任何建议或解释为什么这不起作用。
# make sure mod_rewrite is ON
RewriteEngine On
# force staging and live to SSL
RewriteCond %{HTTPS} !=on
# Unless its IE 8
RewriteCond %{HTTP_USER_AGENT} !compatible;\sMSIE\s8\.0 [NC]
RewriteCond %{HTTP_HOST} ^(www\.|staging\.)?example\.com [NC]
# Skip the API
RewriteCond %{REQUEST_URI} !^/api/.*
# 301 Permanent
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
# force IE8 to Non-SSL
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_USER_AGENT} compatible;\sMSIE\s8\.0 [NC]
RewriteCond %{HTTP_HOST} ^(www\.|staging\.)?example\.com [NC]
# Skip the API
RewriteCond %{REQUEST_URI} !^/api/.*
# 302 Temporary
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [L,R=302]
答案 0 :(得分:0)
看不出有什么不妥,虽然假设你已经清除了浏览器的缓存,但你可以尝试一种不同的方法,并在规则列表的顶部包含一个明确的传递:
RewriteRule ^api/ - [L]
您可以在RewriteEngine On
下添加该权利,并摆脱/api
条件。
答案 1 :(得分:0)
RewriteCond %{REQUEST_URI} !^/api/.*
正在运行,问题是后来通过前端控制器/index.php重写路由导致htaccess重新分析。
将规则更改为RewriteCond %{REQUEST_URI} !^(/api/|/index.php)
解决了问题。在前端控制器中,index.php无论如何都不能直接调用,所以这不是问题。