.htaccess重写规则也重写了不同的url

时间:2014-11-22 01:49:43

标签: apache .htaccess mod-rewrite

我正在使用.htaccess在我的网站上制作几页安全 - /续订和/续订结果。我有一个脚本,用于从/更新用户的输入,将它们发送到异地以完成某些操作,然后它们应返回/更新结果。这可以在没有https重写规则的情况下工作,但是当我尝试实现规则时(见下文),而不是返回/更新结果,用户被重定向到/更新。

这是我的.htaccess文件的相关部分:

RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^renew https://www.mydomain.com/renew [R,L]
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^renew\-result https://www.mydomain.com/renew-result [R,L]

提前感谢您的任何帮助。

2 个答案:

答案 0 :(得分:1)

问题是/renew-results匹配以/renew开头的网址(这是您的第一条规则)。有几种方法可以绕过这个问题' ..

首先(匹配的最长网址首先):

RewriteCond %{HTTPS} off
RewriteRule ^renew-result https://www.mydomain.com/renew-result [R,L]
RewriteCond %{HTTPS} off
RewriteRule ^renew https://www.mydomain.com/renew [R,L]

第二个(限制网址与最后的$完全匹配)

RewriteCond %{HTTPS} off
RewriteRule ^renew$ https://www.mydomain.com/renew [R,L]
RewriteCond %{HTTPS} off
RewriteRule ^renew-result$ https://www.mydomain.com/renew-result [R,L]

第三,将两种情况组合在一个规则中。 ^renew(-result)?$仅匹配/renew/renew-result匹配-result(如果请求中存在)。如果捕获呈现,https://www.mydomain.com/renew$1会重定向到https版本的/renew/renew-result

RewriteCond %{HTTPS} off
RewriteRule ^renew(-result)?$ https://www.mydomain.com/renew$1 [R,L]

答案 1 :(得分:0)

通过测试,这与我的相似。

RewriteCond %{SERVER_PORT} 80 RewriteRule ^renew https://www.domain.com/renew [L,R=301]