RewriteCond HTTP_HOST仍然通过

时间:2012-03-19 18:49:53

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

问题是,即使我访问:

http://s.domain.com/basket//coordonnees/login/

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

CrazyCoder

1 个答案:

答案 0 :(得分:4)

没关系,我在两秒钟后发现它,但这可能对其他人有所帮助:

条件:

RewriteCond %{HTTP_HOST} (www\.)?domain\.com

发生冲突的情况:

RewriteCond %{HTTP_HOST} ^s\.domain\.com

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