我正在尝试将所有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
谢谢
答案 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。