今回初めて「mod_rewrite」の設定をしてみた。
なお、「mod_rewrite」のモジュールが有効に
なっているものとして話を進める。
「mod_rewrite」の有効化の方法はこちらを参考に。
さて、「mod_rewrite」を使用する目的は、
動的URLを静的URLにするためである。
例えば
http://sample.com/sample/sample.php?a=123&b=456
というページがあったとする。
つまり、GETを使って動的にDB等とやりとりする為に
引数を与えて処理をさせる為に動的にしているページ。
ただ、静的URLの方がSEO対策としていいみたいなので、
今回設定を試みた。
「mod_rewrite」を使用すると、上記URLが
http://sample.com/sample/sample.php/123/456 とか
http://sample.com/sample/123/456 とかでアクセス出来るようになる。
ようは、http://sample.com/sample/123/456にアクセスすると、
Apacheがhttp://sample.com/sample/sample.php?a=123&b=456の
ページをちゃんと返してくれるのである。
前置きが長くなったが、設定方法について記載する。
使用するには2つの方法があって、「httpd.confに設定する」のと
「.htaccessに設定する」である。
今回は.htaccessに設定してみた。参考にしたサイトはこちら
今回やりたい事は以下の通り。
http://sample.com/sample/sample.php?a=123&b=456
↓↓↓↓
http://sample.com/sample/123/456
http://sample.com/sample/hogehoge.php?a=123
↓↓↓↓
http://sample.com/sample/123
の2パターン。
まず最初は以下のように「.htaccess」に記載してみる。
RewriteBase /sample #対象ディレクトリを指定する
RewriteCond %{REQUEST_FILENAME} !-f #指定したファイルが存在すれば真
RewriteCond %{REQUEST_FILENAME} !-d #指定したディレクトリが存在すれば真
RewriteRule ^([0-9]+)/([0-9]+)+ sample.php?a=$1&b=$2 #ルール
RewriteRule ^([0-9]+) hogehoge.php?a=$1 #ルール
これで動作を確認してみるとうまい事動作してくれない。
RewriteRuleの1つをコメントアウトしてみて動作確認してみると、
片方は有効になっている。
両方を有効にすると、ダメになるみたい…。
これは困ったと思い調べてみても有効な情報は見当たらず…。
※途中設定失敗し、ループをしたのかサーバがフリーズしてしまった
それで四苦八苦したあげく下記のように記載してみた。
RewriteBase /sample
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)/([0-9]+)+ sample.php?a=$1&b=$2 [L]
RewriteEngine On
RewriteBase /sample
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+) hogehoge.php?a=$1 [L]
と、うまく動作してくれた!!!
複数指定する時は、RewriteEngine Onをルール毎に
書いてあげないといけないのかな…?
ま、なんにしても悩むこと5時間くらい掛かっていたから嬉しかった
あ、当然ながら、phpファイルもしくはhtmlファイルで
a href="sample.php?a=123&b=456"みたいに書いてたとこを、
a href="123/456"みたいにするのを忘れずに編集。
また、ApacheがURLを変換して返した後、上記のaタグとかでパスの記載を
相対パスで書いていると動作がおかしくなったので、
a href="/sample/123/456"みたいな感じで絶対パスにしてあげる事で
不具合は解消。
※それに伴いimgタグやスタイルシート指定パス等、相対パスの部分は絶対パスに全て変更。
まだまだ奥が深くてあんまり理解できない「mod_rewrite」。
なかなか手強い敵だが、ちょっとずつ理解していこう!!













カテゴリ:





