2017-01-24 42 views
3

也許我正在監督一些非常基本的東西,htaccess並不是我的專業領域。.htaccess將HTTPS強制添加到現有的重寫規則

我的網站是HTTPS只,實現這一點,根文件夾/文件包含這些行:

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

這一切正常。現在我們有一個名爲/項目的新文件夾,其中包含了自己的htaccess的規則,由一個名爲/projects/project.html

文件夾/項目內的工作htaccess文件在數據庫中查詢翻譯網址是:

RewriteEngine On 
RewriteBase /projects/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ project.html?project=$1 [QSA,L] 

現在我想強制https連接,因爲如果您直接訪問http://URL,主目錄中的https規則不適用於/ projects。因此,我修改了文件:

RewriteEngine On 

RewriteCond %{HTTPS} !=on 
RewriteRule ^.*$ https://example.com%{REQUEST_URI} [R=301,L,NE] 

RewriteBase /projects/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ project.html?project=$1 [QSA,L] 

據此,切換到HTTPS,但我不斷收到「ERR_TOO_MANY_REDIRECTS」。

當我改變行作爲@thickguru建議,像這樣:

RewriteRule ^(.*)$ https://example.com/$1 [R,L] 

它將我重定向到https://example.com/index.html的時候了。

我擺弄的設置,也與this post的信息,但是我仍然無法得到它的工作。

+0

你使用的是什麼版本的Apache? – starkeen

+0

我不確定我是否給出了正確的答案,但是phpinfo提到了Apache2 API版本20051115.如果我需要去別的地方看看,請告訴我:) – SJDS

回答

3

我剛注意到它的var iable你是對的匹配是%{ENV:HTTPS},所以,你可以使用下面的規則/projects/.htaccess:

RewriteEngine on 

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

清除瀏覽器緩存或嘗試不同勢瀏覽器來進行測試。

+0

至少現在頁面加載正確使用HTTPS時:// URL中的,與現在的完整代碼是 'RewriteEngine敘述在 的RewriteCond%{ENV:HTTPS}上 重寫規則^ HTTP://%{HTTP_HOST} %{REQUEST_URI} [NE,L,R] RewriteBase /項目/ 的RewriteCond%{REQUEST_FILENAME}!-f 的RewriteCond%{REQUEST_FILENAME}!-d 重寫規則^(。+)$ project.html?項目= $ 1 [QSA,L]' 現在,我在輸入URL的http版本時獲取ERR_TOO_MANY_REDIRECTS。 – SJDS

+0

抱歉,重定向目的地存在拼寫錯誤。現在你可以看到編輯 – starkeen

+2

Aaah指出,錯字很明顯,我沒有看到愚蠢。這正是我所尋找的解決方案。非常感謝每個人的貢獻。特別感謝@tickguru的賞金! – SJDS

1

.htaccess使用此:

RewriteCond %{HTTPS} !=on 
RewriteRule ^.*$ https://www.example.com%{REQUEST_URI} [R=301,L,NE] 

而且,把這個你對你的其他RewriteRule以上,讓您的.htaccess看起來像:

RewriteEngine On 

RewriteCond %{HTTPS} !=on 
RewriteRule ^.*$ https://www.example.com%{REQUEST_URI} [R=301,L,NE] 

RewriteBase /projecten/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ project.html?project=$1 [QSA,L] 

編輯 - 試試這個:

RewriteCond %{HTTPS} !=on 
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] 
+0

這不起作用,給出的錯誤是請求永遠不會結束..在地址欄中,URL已更改爲HTTPS變體,但 – SJDS

+0

我已對代碼進行了編輯。請用新的代碼再試一次。另外,測試它在另一個'RewriteRule'下面。 – Lag

+0

我試了兩個命令,再加上試着玩R = 301,L,NE和QSA標籤。但是,一直在拋出錯誤。沒有正確處理與HTTPS相結合的現有規則 – SJDS