重写模块和否定模式的问题

时间:2010-07-26 23:27:50

标签: apache mod-rewrite https

我有以下问题:

  • 如果网址包含关键字“formulario - ”并且它是 http 连接,我想重定向到 https 版本。
  • 如果网址不包含关键字“formulario - ”并且它是 https 连接,我想重定向到< strong> http 版本。

我尝试了以下.htaccess,但它无法正常工作:

RewriteEngine On

RewriteCond %{HTTPS} =on
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI}

RewriteCond %{HTTPS} !=on
RewriteRule ^formulario-(.*) http://%{HTTP_HOST}%{REQUEST_URI}

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

究竟什么不起作用?

我想到的一件事是:尝试使用[L] flag作为第一条规则,以便在第一条规则适用时,apache会停止处理第二条规则。

我不确定是不是。您可能需要一些方法来测试用户之前是否已经重定向。

答案 1 :(得分: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