【WordPress】.htaccess の書き方 【簡単な方法あります】

wordpress

こんにちは。菜笑[なえ] (@nae310_)です。

今回は.htaccess についての備忘録です。
リダイレクト設定などプラグインを使う方も多いと思いますが、.htaccess の編集方法がわかればプラグイン1つ不要になるので、ぜひ使えるようにしましょう。

ただ.htaccess の編集は間違えるとページが表示されなくなったりという可能性もあリます。

なので、
.htaccess ってなに?
・そんなファイルどこにあるの?
という方はプラグイン使っておいた方が安全です。

完成コード

今回は例としてexample.com というドメインを例に使用しています。

それぞれどのように編集すればいいか、何が書いてあるかの解説はこのあと書いています。

# BEGIN redirect
<IfModule mod_rewrite.c>
RewriteEngine On

# httpsに転送
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

# wwwなしに(どちらか一方)
RewriteCond %{HTTP_HOST} ^www.example\.com
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

# wwwありに(どちらか一方)
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

</IfModule>
# END redirect


# 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


# redirect each page
redirect 301 旧URLパス 新URL
redirect 301 旧URLパス 新URL

各記述の編集方法

WordPress初期設定

# BEGIN WordPress# END WordPress の部分です。

WordPressの初期設定で記述されているものなので、基本的にそのままで大丈夫です。

URLの正規化

# BEGIN redirect# END redirect の部分です。

ここはURLを正規化するための設定を記述しています。
URLの正規化というのは、同じページなのに違うURLで表示されてしまうことが内容に、統一した表記にすることです。

今回はhttp://~ へアクセスがあった場合にhttps://~へリダイレクトする設定と、wwwの有無を統一させる設定を書いています。

以下のどの条件に当てはまるかを確認して、上記コードから該当する箇所を削除してください。

  • httpsを使用しない場合
    • # httpsに転送 の部分を削除
  • wwwなしのURLを使う場合
    • # wwwありに(どちらか一方) の部分を削除
  • wwwありのURLを使う場合
    • # wwwなしに(どちらか一方) の部分を削除

そして以下にも注意して記述を修正していきましょう。

  • example.com を自身のドメインに変更する
  • example\.com となっている部分の\ は削除しない
  • # BEGIN WordPress# END WordPress よりも前に書く

各ページのリダイレクト[簡単!]

# redirect each page
ここは各ページのリダイレクトが必要な場合に使用します。

例えば、https://example.com/old-pageというページをhttps://example.com/new-pageというページにリダイレクトする場合は以下のような記述になります。

redirect 301 旧URLパス 新URL
 ↓
redirect 301 /old-page https://example.com/new-page

注意点としては、リダイレクト元の古いページはURLではなくパスを記述するということです。
パスというのはURLからドメイン部分https://example.com を削除した場所になります。

この書き方でリダイレクトしたいページをいくつも設定することができます。

WordPressのパーマリンクを変えた場合などには、既存のページのリダイレクト設定を全て書けばOKです。

ただ、全投稿のURLを書くのは結構大変ですよね。

自分も手動でやるのは嫌だと思い、一括で全投稿ページのURL&リダイレクト設定の記述が取得できるサービスを作ったので、よければ使ってみてください。
※ 開くまでに時間がかかる場合があります。

投稿記事のリンク一括取得

mod_rewriteの解説

では、次に# BEGIN WordPress# BEGIN redirectに書いてある内容について、もう少し詳しく解説しています。

知らなくても上記設定をすれば問題なく動くので、気になる方だけご覧ください。

IfModule

<IfModule mod_rewrite.c> … </IfModul>mod_rewrite というモジュールが使えるかどうかを確認しています。
mod_rewrite モジュールが使用できる場合は、<IfModule mod_rewrite.c> … </IfModul>の中の記述を実行します。

mod_rewrite.c というのはmod_rewrite モジュールのファイル名です。

もし確実にmod_rewrite モジュールが使えることがわかっていれば記述は不要です。

ですがエラーとなっても困るので基本的に<IfModule mod_rewrite.c> … </IfModul>の中にこれから説明する記述を書いていく。という認識で大丈夫です。

RewriteEngine

RewriteEnginemod_rewrite のon, offを設定するものです。

<IfModule mod_rewrite.c> のあとすぐ処理の先頭に、RewriteEngine Onとonにして書いておけば大丈夫です。

RewriteCond

RewriteCond はその後のRewriteRuleを実行するための条件を指定します。
この条件にマッチした場合は、後述するRewriteRule に従ってリダイレクトが実行されます。

条件の指定の仕方は以下の通りです。

RewriteCond %{環境変数} 条件
  • 環境変数の例
    • HTTPS: httpsアクセスならON、それ以外はOFF
    • HTTP_HOST: ホスト名(www.example.comなど)
    • REQUEST_URI: リクエストされたURI(/index.html など)
    • REQUEST_FILENAME: リクエストされたファイル名。ファイルがなければREQUEST_URIと同じ値。
  • 条件の例
    • 正規表現: ホスト名の場合、^www.example\.com など
    • -f: 存在するファイルであればtrue(!-f は真偽値が反対になる)
    • -d: 存在するディレクトリであればtrue(!-d は真偽値が反対になる)

RewriteRule

RewriteRule はリダイレクトのルールを書いていきます。

書いてある内容は以下の通りです。

RewriteRule 置換条件 置換語の文字 [オプション]
  • 置換条件
    • どんなURLをリダイレクトさせるか?という条件
    • 正規表現が使える
    • 置換語の文字
  • リダイレクト先のURL
    • $1は正規表現の()内の条件にマッチした文字が入る
  • オプション
    • 301リダイレクトの場合[R=301] が必須
    • [R=301] 省略すると302リダイレクトとなる
    • [L] があればそこで処理が終了し、その後の処理は実行されない
    • [R=301,L] はセットで書くと思ってOK

RewriteBase

RewriteBase はリダイレクト先URLの基準のディレクトリを指定できます。

ただこれはRewriteRule で指定したリダイレクト先のURLが相対パスで示されている場合のみ有効となるので、絶対パスで指定する場合は不要となります。

RewriteBase / と指定した場合は、ルートディレクトリ(.htaccessが配置されているディレクトリ)が基準となります。

おわりに

かなり長くなりましたが.htaccessについて少しは理解を深めていただけたでしょうか。

mod_rewriteを自分で書こうと思うと大変だと思うので、基本的にリダイレクトしたいページがあれば、「各ページのリダイレクト」の部分で解説した方法で書けばOKです。

redirect 301 旧URLパス 新URL ですね。

WordPressでパーマリンクの変更方法を探していた方は、ぜひこちらもご利用ください。
一発で全投稿ページのリダイレクト設定の記述が取得できるので。

投稿記事のリンク一括取得

SNS

Twitter:@nae310_
Instagram:310nae