気まぐれ備忘録

さくらのレンタルサーバーで RewriteRule を使うときのポイント

※Qiitaからの移植記事です。

概要

さくらのレンタルサーバーで mod_rewrite、特にRewriteRuleを使うときに、サーバー独特の仕様にだいぶハマった。

事の発端

Mac端末上でMAMPを用いてローカル環境を整え、せっせこせっせこシステムを作っていましたが、この度本番環境(さくらのレンタルサーバー←ここ重要)で動かすことに!!

ディレクトリ丸ごとコピってDB設定施して、いざテストアクセスーーそこで事件は起きました。
.htaccessファイルに


MultiviewsMatch Any
RewriteEngine On
RewriteBase /
RewriteRule ^([0-9a-zA-Z_-]+)/([0-9]+)/([0-9]+)$ $1.php?var1=$2&var2=$3 [QSA,PT] 

と設定し、
http://example.com/aaa/hoge/moge にアクセスすると http://example.com/aaa.php?var1=hoge&var2=moge が動く、そんな感じにしていたのですが、動かない…。

検証

一体どうした、という事で検証しました。するとどうやら/hoge以降のパラメーターが無視されていることが発覚。

つまり /aaa/hoge/moge にアクセスしようが /aaa/longtexttext にアクセスしようが、同じ /aaa が呼ばれる(パラメータが使われない)

解決策

こんな記事を発見。
http://d.hatena.ne.jp/tashinami/20091221/1261365633
要するにやりたいことはリンク先の方と同じです。先人の知恵をお借りします…。

同じスクリプト名だとダメらしい。なぜかは知らないです。教えてくださいすごい人。
つまり。


# .htaccess
MultiviewsMatch Any
RewriteEngine On
RewriteBase /
RewriteRule ^([0-9a-zA-Z_-]+)/([0-9]+)/([0-9]+)$ data_$1.php?var1=$2&var2=$3 [QSA,PT] 

のように、実行ファイル名をそのまま引き継がない(別名ファイルにする)ことで解決!!
http://example.com/aaa/hoge/moge にアクセスすると http://example.com/data_aaa.php?var1=hoge&var2=moge が動く、そんな感じにしてみました。