2017-10-08 96 views
1

我使用類似於我.htaccess文件下面的東西重定向所有http請求https的.htaccess重寫規則,以HTTP重定向到https弄亂%轉義參數,URL

RewriteEngine on 
RewriteCond %{HTTPS} !=on 
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

這樣的作品,除了因爲當一個URL傳遞與逃脫的參數,這樣的情況:

http://www.example.com/download.php?go=app%20name 

重定向時,它被誤再次逃進:

https://www.example.com/download.php?go=app%2520name 

我該如何解決這個問題?

回答

1

使用NE or noescape flag在您的規則:

RewriteEngine on 

RewriteCond %{HTTPS} !=on 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] 

確保測試更改之前,清除瀏覽器緩存。

+0

哦,老兄,我忘了網頁瀏覽器緩存。我只花了10分鐘看到爲什麼'NE'條件不起作用。然後在底部看到你的編輯。只是好奇,瀏覽器緩存如何影響它?在服務器上解釋'.htaccess',並且客戶端瀏覽器沒有它的概念。 – c00000fd

+0

如果客戶端瀏覽器從Web服務器獲取「301」狀態,則會在本地緩存原始URL和重定向URL。下次您在瀏覽器中訪問或輸入原始網址時,它會提供重定向的網址,並跳過**跳至網站服務器。 – anubhava

+0

謝謝。僅僅因爲好奇,有沒有一種快捷方式可以在Chrome瀏覽器中清除緩存?類似於Shift + F5清除CSS緩存。 – c00000fd