我需要 mod_rewrite 将所有 http
请求重定向到 https
,但我想排除一些 URL
# force https
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^secure\. [NC]
RewriteCond %{REQUEST_URI} !gateway_callback [NC]
RewriteRule ^. https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,QSA]
必须排除所有与 gateway_callback
匹配的网址
此 URL 不应该被重定向,但它确实被重定向了!?
http://secure.localhost/da/gateway_callback/29/
已尝试刷新浏览器中的 DNS 缓存,但 URL 仍重定向至 https
最佳答案
配置的主要问题是 REQUEST_URI 变量包含正斜杠之后的所有内容(包括正斜杠)。第三个 RewriteCond 语句需要更新为如下内容:
RewriteCond %{REQUEST_URI} !^/da/gateway_callback/.*$ [NC]
这应该与您提供的示例相匹配。如果 URI 并不总是以 /da/
开头,那么您可能需要输入通配符:
RewriteCond %{REQUEST_URI} !^/[^/]+/gateway_callback/.*$ [NC]
其中 [^/]+
匹配一个或多个不是正斜杠的字符。
我建议尽可能使用正则表达式 anchor ,因为它可以消除歧义。尝试匹配 REQUEST_URI 的原始 RewriteCond 并未使用它们,这可能会令管理员乍一看感到困惑。
另请注意 official documentation 中 RewriteCond
和 RewriteRule
指令的所有相关示例使用开始 anchor 。
关于apache - mod_rewrite - 排除 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21075835/