2014-11-22 137 views
0

我正在使用.htaccess在我的网站上创建几个网页secure -/renew和/ renew-result。我有一个脚本,它接受/更新用户的输入,将它们发送到异地完成某些操作,然后将它们返回到/ renew-result。这可以在没有https重写规则的情况下运行,但是当我尝试实现规则时(见下文),用户不会返回/ renew-result,而是重定向到/ renew。.htaccess重写规则也在重写不同的网址

这是我的.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] 

感谢您的任何援助。

+0

更换'的RewriteCond%{SERVER_PORT}^80 $'和'的RewriteCond%{} HTTPS和off',而不是'重写规则^ renew'应该是'^重写规则更新$'否则将被应用到任何开头的URL '/ renew'和'/ renew-result'也属于那个列表。 – Cheery 2014-11-22 02:28:03

+0

感谢您的建议。为什么使用HTTPS而不是SERVER_PORT? – 3rik5 2014-11-22 23:18:29

+0

因为https连接可以通过端口80完成到前端(如果存在),并且可以通过端口80完成,但是在'mod_rpaf'帮助下为'安全'连接设置环境。这就是我在我的服务器上做的事情--cachig nginx,它也实现了https连接,正常连接到后端apache,但提供有关连接类型的信息。另外后端可以在其他端口上运行,而不是在80端口上运行。 – Cheery 2014-11-22 23:33:47

回答

1

的问题是,/renew-results开始/renew的URL(这是你的第一条规则)相匹配。有几种方法可以绕过这个“问题” ..

第一(最长的URL匹配先行):

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] 

二(URL限制为完全匹配,与$末)

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] 
0

没有测试,这是类似于我的东西。

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