HardCore,HeavyMetal,ThrashMetal,NewSchool,MetalCore,METALLICA,HATEBREED,KILLSWITCH ENGAGE,SLIPKNOT,ラウド,メタル,ハードコア,スラッシュ,Metal-blood,%cats%,IT,Linux,WORDPRESS,CentOS,METALBLOOD

Apache mod_rewrite設定

カテゴリ: IT, Linux |

METALBLOOD

今回初めて「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」に記載してみる。

RewriteEngine On #Rewriteを有効化する
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つをコメントアウトしてみて動作確認してみると、
片方は有効になっている。
両方を有効にすると、ダメになるみたい…。
これは困ったと思い調べてみても有効な情報は見当たらず…。
※途中設定失敗し、ループをしたのかサーバがフリーズしてしまった dame

それで四苦八苦したあげく下記のように記載してみた。

RewriteEngine On
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時間くらい掛かっていたから嬉しかった dokidoki

あ、当然ながら、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」。
なかなか手強い敵だが、ちょっとずつ理解していこう!!



▲Top

関連記事:

関連タグ


コメント/トラックバック


この記事は 2007年5月28日に IT, Linuxのカテゴリで投稿されました。

※現在、この記事へのコメントは受け付けていません。

トラックバック用URL

http://metal-blood.com/blog/it/51/trackback/