2014-11-22 165 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]