初心者でも簡単!RewriteRuleが使用可能か確認する方法

製作 プログラム

2016/06/23(木)

.htaccessとは

以前の記事でも少し紹介させていただきましたこの.htaccess。行頭にドット「.」がついている少し不思議なこのファイル、読み方はエイチティーアクセスと読みます。この.htaccessをサーバ上に置くことで一定のIPアドレスからのアクセスを制限したり、301リダイレクトというページ移送の設定をする事が出来ます。

mod_rewriteとは

mod_rewriteとは301リダイレクトをするための機能の名前です。レンタルサーバにはお名前.comやネットオウル、ドメインキングなどいろいろなところがあり、それぞれサーバの機能も違っています。このmod_rewriteに対応していないサーバても301リダイレクトは出来るのですが、対応しているサーバではより細かな転送設定が可能になります。

具体的には前回の記事「htaccessでトップページのみ301リダイレクトする方法」で紹介させていただいた「RewriteEngine on」や「RewriteRule」はこのmod_rewriteが有効でないと使用することができません。(有効じゃない場合は代わりに「Redirect permanent」を用いて301リダイレクトすることになります。)

mod_rewriteが有効か確認する方法

そんなリダイレクトの細かな設定ができるmod_rewriteが自身が借りているサーバで有効かどうかカンタンに確認する方法です。

  1. 下記コードを.htaccessにコピペしてサーバに置く
  2. 「http://○○.com/test/」をブラウザのURL欄に打ち込みアクセス(例:このサイトだと「http://blog.dododori.com/test/」になります。)
  3. ヤフーのページが表示されたらmod_rewriteが有効!
  4. 確認が済んだらきちんと下記の記述を消しておいてください。

RewriteEngine on
RewriteRule test http://yahoo.co.jp/ [R=301,L]

wordpress(ワードプレス)の時の注意点

wordpress(ワードプレス)のhtaccess

wordpress(ワードプレス)の場合は、最初からサーバ上に.htaccessファイルが存在しています。また中身もすでに記載されてます。こんなの


# 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

ワードプレスで301リダイレクトの設定をする場合、この記述はそのまま置いておいてこれより上部に自身の設定したい301リダイレクトを記述するようにしてください。

上に書かないといけない理由

推測なのですが一応理由を書きます。

上記のワードプレスの記載は「リクエストされたURLがサーバ上に実際にあるファイルやフォルダでなかったらindex.phpに飛べ」とリダイレクトが設定されています。

また、ワードプレスで作られた固定ページや記事ページ等の各ページは実際にサーバ上に存在するページではなくワードプレスがphpというプログラム言語を通じて作成しているものになります。

なのでwp-admin.php等にアクセスする場合を除いてほとんどの場合、このリダイレクトによってindex.phpに飛ぶようになっているんだと思います。

さらに301リダイレクトの設定はhtaccessファイルの記述の上から下に順次実行されますので、ここより下に他のリダイレクトを記述してもその処理まで読まれないのだと思います。

コード説明

RewriteEngine on
これは今から301リダイレクトの機能を使いますよ~。と宣言している部分です。
RewriteRule test http://yahoo.co.jp/
①「test」というURLにアクセスされたら、②「http://yahoo.co.jp/」ヤフーに飛べ!飛び方は③「 [R=301,L]」301リダイレクトで。という指定になります。詳しくはhtaccessでのリダイレクトで説明しています。

もしmod_rewriteが使えない場合は

もしmod_rewriteが使えない場合はRedirect permanentでリダイレクトすることができます。やり方についてはまたいつか別の記事で紹介できればと思います。

もう一つ、phpにはphp_info()という有効になっているphpの機能を確認できる方法がありますが、htaccessとphpは関係がないので、mod_rewriteの有効無効はphp_info()では確認することはできません。

なのでphp_info()を見てみてmod_rewriteが乗っていなくても落胆するのはまだ早いです。