WordPressの.htaccessについて-特定のURLだけhttpsに飛ばしたりhttpに飛ばしたり
Wordpressで作ったサイトをSSL化することがあると思います。
サイト全体をhttpsにしたり、もしくはお問い合わせフォームだけhttpsにしたり。
お問い合わせフォームだけでしたら、既存のWordpressのプラグインで簡単に特定のURLだけをSSL化できます。
しかし今回は、サイト全体をhttpsに遷移させて、ある特定のURLだけをhttpに遷移させるというものでした。
いろいろプラグインを探し回りましたが、目的を達成するようなプラグインは見つかりませんでした。
どうやら.htaccessで何とかしないといけないということで、何とかしてみました。
やりたいことのまとめ
- サイト全体をSSL化する。(httpsへ遷移させる)
- wpを使ったサイトだけでなく、静的Htmlのページもhttpsへ遷移させる。
- 特定のURLのみをhttpへ遷移させる。
- www無しのURLをwww有りのURLへ遷移させたい。
なぜこのような事になったかというと、特定のサービスの機能が、httpsに対応していないが為にこんなことになりました。
WordPressの.htaccessの中身を見てみる
1 2 3 4 5 6 7 8 9 10 |
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress |
こちらの解説はググるといっぱいでてくるのでそれらにお任せいたします。
参考:今さら人に聞けない!WordPressで使われているmod_rewriteの説明書|クロノドライブ
http://html-coding.co.jp/knowhow/tips/wp_modrewrite/
今回はいろいろ躓いたのですが、そこの解決キーになったのはこちらの部分です。
1 2 |
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d |
URLの位置が、「ファイルでも無くフォルダでも無い場合」みたいな感じらしいです。
wpを設置した時に、記事のパーマリンクと等しくなる場所にフォルダがあると上手く表示されないのはこういう事なんですね。
実際に書いたコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<IfModule mod_rewrite.c> RewriteEngine On # www無しのURLをwww有りに遷移させる RewriteCond %{HTTP_HOST} ^example.com [NC] RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] # httpsでアクセスされた際に指定のURLの場合はhttpへ遷移させる RewriteCond %{REQUEST_URI} ^/sample01/test01.html [OR] RewriteCond %{REQUEST_URI} ^/sample02/test02.html RewriteCond %{HTTPS} on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L] # httpでアクセスされた際に指定のURL以外はhttpsへ遷移させる RewriteCond %{REQUEST_URI} !(^/sample01/test01.html) RewriteCond %{REQUEST_URI} !(^/sample02/test02.html) RewriteCond %{HTTPS} off RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] # BEGIN WordPress RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # END WordPress # wpでは無い静的HTMLのページをhttpsへ遷移させる RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] </IfModule> |
基本的にはいろんなサイトで紹介されているやり方なのですが、Wordpressと組み合わせる方法は全く紹介されてい無かったので、躓きました(笑
結果的に「ファイルでも無くフォルダでも無い場合」の指定をしただけですが、その答えにたどり着くまでどれだけ時間がかかったことか^^;
以下ざっくりと解説します。
6〜7行目
6 7 |
RewriteCond %{HTTP_HOST} ^example.com [NC] RewriteRule ^(.*)$ https://www.example.com/$1 [R,L] |
www無しのURLをwww有りに遷移させます。
「example」の箇所を自分のドメイン名に書き換えます。
www有りのURLをwww無しに遷移させる場合。
1 2 |
RewriteCond %{HTTP_HOST} ^www.example.com [NC] RewriteRule ^(.*)$ https://example.com/$1 [R,L] |
10〜15行目
10 11 12 13 14 15 |
RewriteCond %{REQUEST_URI} ^/sample01/test01.html [OR] RewriteCond %{REQUEST_URI} ^/sample02/test02.html RewriteCond %{HTTPS} on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R,L] |
httpsでアクセスされた際に指定のURLの場合はhttpへ遷移させます。
10〜11行目に対象のURLを記載します。
URLを増やしたい場合は、[OR]で増やしていけますが、最後のURL指定だけは[OR]をつけません。
18〜23行目
18 19 20 21 22 23 |
RewriteCond %{REQUEST_URI} !(^/sample01/test01.html) RewriteCond %{REQUEST_URI} !(^/sample02/test02.html) RewriteCond %{HTTPS} off RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] |
httpでアクセスされた際に指定のURL以外はhttpsへ遷移させます。
18〜19行目に対象のURLを記載します。
こちらはURLを増やしたい場合は、そのまま行数を増やして行きます。
35〜36行目
35 36 |
RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] |
wpでは無い静的HTMLのページをhttpsへ遷移させます。
この指定が無いとwpで作ったページしかhttpsへ遷移しないので注意です。
チラシの裏
正直今回のような例は殆ど無いかもしれません。
実際にググッて見ても参考が見つからなかったので…探しきれて無いだけかもしれませんが。
なので、いざって時が来るかもしれないので、そういった時はこの記事を参考にしてみてください。
コメントを残す