2011-07-16 17 views
2

私はワードプレスサイトを持っており、特定のページをHTTPSにリダイレクトしたい。具体的には、http://www.mydomain.com/?page_id=4https://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. 私はターゲットURLから/$1を削除しました。意味がありません。このルールがすべきことは、このバージョンとこの1つの特定のURLだけをセキュアなバージョンにリダイレクトすることです。

  3. この行が本当に必要なのかわからない:​​。それがなければ正常に動作するはずです。

  4. このルールを適切な場所に配置することを忘れないでください。配置する必要があります。BEFORE 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

ありがとう!それはうまくいき、あなたの説明はとても役に立ちました。 1つのフォローアップの質問:実際には、page_id = 3、4、または5のすべてのページをリダイレクトする必要があります(「www.mydomain.com/?page_id=4」だけでなく)。これを達成するためにコードをどのように編集すべきかご存知ですか? – brian

+0

@brian更新された回答を確認してください(2回の小さな変更)。同じURLで動作しますが、異なるIDで動作します。まったく別のURLにしたい場合は、例を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 
... 

これはうまくいかないですが動作します。

最後に1つ問題があります。 URLがpage_idの後に文字を含むことは可能です。例:www.mydomain.com/?page_id=4 &カテゴリ= 1。誰もpage_id = 4の後にワイルドカードを配置する方法を知っていますか?ありがとう!

関連する問題