mod_rewrite - 排除网址

cla*_*rkk 8 apache mod-rewrite

我需要一个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]
Run Code Online (Sandbox Code Playgroud)

gateway_callback必须排除所有匹配的网址

不应该重定向此URL,但确实如此!?

http://secure.localhost/da/gateway_callback/29/
Run Code Online (Sandbox Code Playgroud)

尝试在浏览器中刷新DNS缓存,但URL仍然重定向到 https

rme*_*ins 10

配置的主要问题是REQUEST_URI变量包含正斜杠之后的所有内容.第三个RewriteCond语句需要更新为以下内容:

RewriteCond %{REQUEST_URI} !^/da/gateway_callback/.*$ [NC]
Run Code Online (Sandbox Code Playgroud)

这应该与您提供的示例相匹配.如果URI并不总是以启动开头,/da/那么您可能需要输入通配符:

RewriteCond %{REQUEST_URI} !^/[^/]+/gateway_callback/.*$ [NC]
Run Code Online (Sandbox Code Playgroud)

其中,[^/]+匹配一个或多个字符,这是不是一个正斜杠.

我建议尽可能使用正则表达式锚点,因为它消除了歧义.尝试匹配REQUEST_URI的原始RewriteCond不使用它们,这可能会使管理员随意混淆.

另请注意,官方文档中RewriteCondRewriteRule指令的所有相关示例都使用了开始锚点.