mod_rewrite

mod_rewriteに苦戦したので、書く。
環境は、CentOs5.3

http://www.hoge/312

というアドレスに行くと、

http://www.hoge/index.php?q=312

というページが読み込まれるようにしたい。
そこで、htaccessの使い方を調べて、書いたのがこれだ。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)$ index.php?q=$1 [L]

すると、404エラーが返ってきた!

どういうことなの・・と思いつつ、

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)$ /index.php?q=$1 [L]

と書いたら成功した。どういうことなの・・・

転送先のuriの先頭に/を付けただけです。

まぁ、ってことで無事できました。結果オーライ!
単純に書き間違いとかは、500エラーで返ってくるからわかるよ!

調べるより、現状どうapacheさんが処理しているのかを見る方が良いかも!つまり、ログを出力させる。

Apacheの設定ファイルを書き替える

vim /etc/httpd/conf/httpd.conf

で、それの最終行に

RewriteLog "tmp/rewrite.log"
RewriteLogLevel 9

と記述する。ログ情報がフルに出力されるから、デバッグが終わったらこれは必ず消しましょう。

【細かい事】
httpd.conf の中の AllowOverrideはAllにすること。私の場合は、関係ありそうな所全部のOverrideをAllにしました。
.htaccess の改行コードは必ず LF(UNIX)にすること!
転送の時は、個別設定で必ずアスキー(Ascii)にすること!

これで出来るはず。

追記:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)$ /index.php?q=$1 [L]

これの最終行に [QSA] というパラメータをつけると

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]+)$ /index.php?q=$1 [QSA] [L]

複数のパラメータが取得できます

こうすると

hoge.com/archive?err=3

とかアクセスが来たときに、

hoge.com/index.php?q=archive&err=3

に飛ばせる。  便利!

参考にさせていただいたサイト:

mod_rewriteのインストール・設定 – RewriteRuleのサンプル [Fedora, RedHat, CentOS]

Atsumi3

したいことをします。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください