RewriteCond HTTP_HOST 仍然通过

Mat*_*lin 4 mod-rewrite

我正在构建一个 preprod 环境,客户端和开发人员将能够检查他们即将建立的网站是否一切正常,但我必须禁用所有 HTTPS 重定向,因为此时它会落在 PROD 站点中HOSTNAME 在请求中发送。

这是我正在使用的示例之一:

RewriteCond %{HTTP_HOST} (www\.)?domain\.com
RewriteCond %{HTTP_HOST} ^s\.domain\.com
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} !^/?basket/$
RewriteCond %{REQUEST_URI} !^/?basket/add/
RewriteCond %{REQUEST_URI} !^/?basket/delete/
RewriteCond %{REQUEST_URI} !^/?basket/modify/
RewriteCond %{REQUEST_URI} !^/?basket//add/
RewriteCond %{REQUEST_URI} !^/?basket//delete/
RewriteCond %{REQUEST_URI} !^/?basket//modify/
RewriteCond %{REQUEST_URI} !^/?basket/info_panier.js
RewriteRule ^/?basket/.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
Run Code Online (Sandbox Code Playgroud)

问题是,即使我访问:

http://s.domain.com/basket//coordonnees/login/
Run Code Online (Sandbox Code Playgroud)

它仍然将我重定向到 HTTPS 版本,但我在 s.domain.com 上有一个重写条件,说要跳过此规则......我做错了什么?

疯狂编码器

Mat*_*lin 5

没关系,我在两秒钟后找到了它,但这可能对其他人有帮助:

条件:

RewriteCond %{HTTP_HOST} (www\.)?domain\.com
Run Code Online (Sandbox Code Playgroud)

在条件上发生冲突:

RewriteCond %{HTTP_HOST} ^s\.domain\.com
Run Code Online (Sandbox Code Playgroud)

因为我没有放!一开始。如果我放!在 (www.)?domain.com 之前它不会匹配 s.domain.com,因此工作正常......

  • 这就是您更改示例代码以使其“正常工作”的方式吗?```RewriteCond %{HTTP_HOST} !^s\.domain\.com``` (2认同)