apache - mod_rewrite - 排除 url

标签 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]

必须排除所有与 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 documentationRewriteCondRewriteRule 指令的所有相关示例使用开始 anchor 。

关于apache - mod_rewrite - 排除 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21075835/

相关文章:

apache - 如何在现有 LAMP 服务器上添加 Tomcat 7 虚拟主机?

java - 在单元测试期间,如何将所有输出记录到控制台而不是日志文件

apache - 使用 mod_rewrite 屏蔽重定向到临时域

.htaccess - 从重定向重写规则中排除图像文件夹

php - 如何创建这样的 ".htaccess"文件?

php - .htaccess 文件、PHP、包含目录和 Windows XAMPP 配置噩梦

apache - 调试 .htaccess 重写规则的技巧

apache - 如何显示单个页面的 503 错误

.htaccess - htaccess mod重写,即使文件夹存在

regex - .htaccess 将域名重定向到子目录而不更改 URL