【问题标题】:Problems with rewrite module and negation patterns重写模块和否定模式的问题
【发布时间】:2010-07-27 07:36:08
【问题描述】:
我有以下问题:
- 如果 url 包含关键字 "formulario-" 并且是 http 连接,我想重定向到 https 版本。
- 如果网址不包含关键字“formulario-”并且是https连接,我想重定向到http 版本。
我尝试了以下 .htaccess 但它不能正常工作:
RewriteEngine On
RewriteCond %{HTTPS} =on
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI}
RewriteCond %{HTTPS} !=on
RewriteRule ^formulario-(.*) http://%{HTTP_HOST}%{REQUEST_URI}
感谢您的帮助!
【问题讨论】:
标签:
apache
mod-rewrite
https
【解决方案1】:
未经测试,但总体思路是:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule formulario- https://%{HTTP_HOST}%{REQUEST_URI} [R,L,QSA]
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !formulario-
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R,L,QSA]
理论上你不能否定RewriteRule,但你可以否定RewriteCond。
【解决方案2】:
究竟是什么不起作用?
想到的一件事是:尝试将[L] flag 用于第一条规则,这样如果第一条规则适用,apache 就会停止处理第二条规则。
我不确定是不是这样。您可能需要一些方法来测试用户之前是否已经被重定向。