2013-07-29 35 views
0

我的網站使用外部認證服務,該服務將用戶引導離開所需的頁面,執行登錄,然後重定向回去。.htaccess用於https服務器端口的mod_rewrite正則表達式

問題是,當用戶從https頁面重定向時,身份驗證服務(我無法修改)愚蠢地重定向回http://並在URL末尾附加了一個:443,這隻會引發來自Apache的錯誤。

我已經有一個htaccess指令,以確保用戶總是觀看在HTTPS當前頁面:

RewriteEngine on 
RewriteCond %{SERVER_PORT} 80 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L] 

我正在尋找的是一個重寫規則,將檢測URL以http,並以443結尾,然後讓它重定向到https://而不添加端口。

我試過這樣:

RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [NC,R,L] 

但這似乎沒有工作。

回答

0

使用此代碼替換您的.htaccess代碼:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 

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

此規則將不考慮所有的HTTP流量重定向到https的任何端口被用HTTP請求使用。

+0

不幸的是,這是行不通的。如果我刷新了錯誤的頁面,它不會重定向。我認爲,鑑定腳本正在重定向到端口443上的特定URL,因此沒有被捕獲。 – monkeymatrix

+0

,但即使使用443,它仍然是http,並且'RewriteCond%{HTTPS} off'將返回true。嘗試在另一個瀏覽器中測試或清除緩存。 – anubhava

+0

即使在全新的瀏覽器上,Nope仍然不起作用。 – monkeymatrix