尝试使用SSL重定向特定网址的问题

时间:2011-02-11 12:04:59

标签: apache mod-rewrite

我正在尝试将所有https网址重定向到http(一个帐户/付款除外):

RewriteCond %{SERVER_PORT} =80
RewriteCond %{REQUEST_URI} account/payment$
RewriteRule (.*)  https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

RewriteCond %{SERVER_PORT} =443
RewriteCond %{REQUEST_URI} !account/payment$
RewriteRule (.*)  http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule . - [L]

RewriteRule . index.php [L]

工作正常,除非我要去http://url/account/payment,它会将我重定向到http://url/index.php

谢谢

2 个答案:

答案 0 :(得分:0)

L flag导致已重写的URL重新注入重写过程:

  

但请记住,如果RewriteRule生成内部重定向(在每个目录上下文中重写时经常发生),这将重新注入请求并导致从第一个{重复开始重复处理} {1}}。

为避免将前两个规则应用于此类重新投放的网址,请检查request line

RewriteRule

答案 1 :(得分:0)

每次RewriteRule匹配时,Apaches都会执行内部重定向,并针对新(重写)路径重新评估所有重写规则。

因此,当RewriteRule . index.php匹配时,REQUEST_URI将更改为index.php,并且会再次评估所有重写规则。

RewriteCond %{REQUEST_URI} !account/payment$针对index.php评估为true,并评估下一条规则:RewriteRule (.*) http://%{SERVER_NAME}%{REQUEST_URI},将(外部)重定向到index.php。