2011-07-16 83 views
2

我有一個WordPress網站,並希望將特定頁面重定向到HTTPS。具體來說,我想http://www.mydomain.com/?page_id=4被重定向到https://www.mydomain.com/?page_id=4。我採取的方法是將以下內容添加到.htaccess中:將特定的WordPress頁面重定向到HTTPS

Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^http://www.mydomain.com/?page_id=4 [NC] 
RewriteRule ^(.*)$ https://www.mydomain.com/?page_id=4/$1 [R=301,L] 

但是,當我導航到頁面時,它不會重定向。有什麼想法嗎?

+0

您正在匹配'HTTP_HOST'。你應該匹配'REQUEST_URI'。 – TRiG

回答

2

那麼... %{HTTP_HOST}變量將只被解析爲一個域名,在你的例子中,它將只是www.mydomain.com。你需要不止於此:

Options +FollowSymLinks -MultiViews 
RewriteEngine on 
# force secure version of this page 
RewriteCond %{QUERY_STRING} ^page_id=(\d+) [NC] 
RewriteCond %{HTTPS} =off 
RewriteCond %{HTTP_HOST} =www.mydomain.com 
RewriteRule ^(.*)$ https://www.mydomain.com/$1?page_id=%1 [R=301,L] 
  1. 你必須通過3個的RewriteCond報表中單獨比較查詢字符串,協議和可選域名。

  2. 我已經從目標網址中刪除了/$1 - 這沒有任何意義。所有這個規則應該做的就是重定向到這個安全版本,只有這個特定的URL。

  3. 我不確定這條線是否真的需要:​​。沒有它,它應該可以正常工作。

  4. 請確保您將此規則放在適當的位置 - 應將其放置在之前 WordPress重寫規則。


UPDATE: 備選:

Options +FollowSymLinks -MultiViews 
RewriteEngine on 
# force secure version of this page 
RewriteCond %{QUERY_STRING} ^page_id=(\d+)(.*) [NC] 
RewriteCond %{HTTPS} =off 
RewriteCond %{HTTP_HOST} =www.mydomain.com 
RewriteRule ^(.*)$ https://www.mydomain.com/$1 [QSA,R=301,L] 
+0

謝謝!這有效,你的解釋非常有幫助。一個後續問題:我實際上需要重定向page_id = 3,4或5的所有頁面(不僅僅是「www.mydomain.com/?page_id=4」)。你知道我應該如何編輯代碼來實現這個目標嗎? – brian

+0

@brian檢查我更新的答案(2個小改動)。它將適用於相同的URL但使用不同的ID。如果您希望獲得完全不同的網址 - 請提供一個示例或2,以便我可以正確調整規則。 – LazyOne

+0

嗨。更新後的代碼將頁面重定向到https,但頁面已損壞。以下是我收到的錯誤消息:「警告:在[path]中爲foreach()提供了無效參數」。 – brian

0

感謝所有幫助。我想出了一個解決方法。我基本上硬編碼每個頁面塊#:

Options +FollowSymLinks -MultiViews 
RewriteEngine on 
#force secure version of page=4 
RewriteCond %{QUERY_STRING} =page_id=4 [NC] 
RewriteCond %{HTTPS} =off 
RewriteCond %{HTTP_HOST} =www.mydomain.com 
RewriteRule ^(.*)$ https://www.mydomain.com/?page_id=4 [R=301,L] 

#force secure version of page=5 
RewriteCond %{QUERY_STRING} =page_id=5 [NC] 
RewriteCond %{HTTPS} =off 
RewriteCond %{HTTP_HOST} =www.mydomain.com 
RewriteRule ^(.*)$ https://www.mydomain.com/?page_id=5 [R=301,L] 

#force secure version of page=6 
... 

不優雅,但它的工作原理。

最後一個問題。 URL可能包含page_id後面的字符。例如:www.mydomain.com/?page_id=4 & category = 1。有沒有人知道如何在page_id = 4之後放置通配符?謝謝!

相關問題