2011-09-01 120 views
2

內容管理系統通常強制頁面通過index.php路由。內容管理系統(CMS)強制SSL/https://使用.htaccess

例如,我使用的CMS上的頁面顯示在URL中,如下所示。

http://www.my-domain.co.uk/index.php?page=263 

的代碼的.htaccess我知道只有聽我發言的index.php文件的一部分。

我現在的重寫代碼如下:

RewriteEngine On 
RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^login/?$ https://www.my-domain.co.uk/login [R=301,L] 

這工作,因爲它是一個特定的目錄,但是,

RewriteCond %{SERVER_PORT} !^443$ 
RewriteRule ^index.php?page=263$ https://www.my-domain.co.uk/index.php?page=263 [R=301,L] 

似乎並沒有工作。

任何想法?

+0

有你的最後一條規則了幾個問題。 RewriteRule的第一個參數是一個正則表達式,所以?有特殊的意義。另外,我很確定它只查看URL的路徑部分,而不是查詢字符串。試試'^ index \ .php $'。 –

+0

Hi @Sean這個想法似乎看起來朝着正確的方向,但是這又會將所有的URL請求重新寫入HTTPS。因爲cms中的所有頁面都通過index.php腳本。 我假設\具有與vb#腳本相同的功能,它規定以下字符應該被視爲已寫入,並應忽略任何特殊含義? 如果是這種情況,我可以寫它作爲索引\ .php \?page = 263 $ – Josh

回答

0

我有我從某個網頁複製的代碼段。也許你可以試試看?

RewriteEngine On 
RewriteCond %{HTTPS} off 
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 
+0

嗨@aesphere這個答案不重寫所有我的URL請求到https? – Josh

1
  1. 重寫規則非常符合URL的path部分,所以它需要只是^index\.php$
  2. 可以使用RewriteCond %{QUERY_STRING}來匹配查詢字符串。
  3. 就像在aesphere的答案中一樣,測試特殊的%{HTTPS}變量比檢查端口更容易。
  4. 使用絕對目標URI意味着[R=301,L],因此您可以將其刪除。
  5. [QSA]追加查詢字符串

所以,你最終獲得:

RewriteCond %{HTTPS} off 
RewriteCond %{QUERY_STRING} ^\?page=263$ 
RewriteRule ^index\.php$ https://%{HTTP_HOST}%{REQUEST_URI} [QSA]