2016-01-20 43 views
1

我htaccess文件是這樣的:如何使用htaccess的轉發到HTTPS不重定向循環

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase /f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php\?p=$1 [QSA,L] 
</IfModule> 

我想添加規則,有誰訪問該站點使用HTTPS的用戶。我添加此代碼(收盤IfModule標籤前右)和獲得重定向循環:

RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

如何調整我的文件,以消除任何不必要的重定向?

+0

是的,這是一個論壇。我添加的第一部分是使網址「更清潔」,這一直運行良好。 – bbglazer

+0

你的Apache版本是什麼? Apache前面有代理嗎? – anubhava

+0

這是一個使用Apache 2.2.31-2併爲域啓用了Cloudflare的共享主機。我不認爲有代理。 – bbglazer

回答

2

試試這個的.htaccess:

RewriteEngine On 
RewriteBase /f/ 

RewriteCond %{HTTP:X-Forwarded-Proto} !https 
RewriteRule^https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php?p=$1 [QSA,L] 

等價的PHP代碼http->https

if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] != 'https'){ 
    header("Location: https://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]); 
    exit; 
} 
+0

謝謝,這似乎工作,但我有一些資源加載問題。我檢查了這個軟件,並且它有一個使用https的條款。有沒有辦法將您的方法轉換爲PHP中的標題? (「Location:https://」。$ _ SERVER [「HTTP_HOST」]。$ _ SERVER [「REQUEST_URI」]); – bbglazer

+0

有效地它是同樣的事情。 – anubhava

+0

如果我在php中使用這個頭,我也會得到重定向循環。有沒有一種方法,我可以轉換和添加您的行「RewriteCond%{HTTP:X-Forwarded-Proto}!https」到一個PHP頭? – bbglazer