フレームワークの.htaccess
# (1) RewriteEngine On RewriteBase / # (2) RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.* - [L] # (3) RewriteCond %{REQUEST_FILENAME} !-f [OR] RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([A-z0-9_]+)/$ index.php?p1=$1&p2=$2&p3=$3&p4=$4&p5=$5 [QSA,NE,L] RewriteRule ^([A-z0-9_]+)/([A-z0-9_]+)/$ index.php?p1=$1&p2=$2&p3=$3&p4=$4&p5=$5 [QSA,NE,L] RewriteRule ^([A-z0-9_]+)/([A-z0-9_]+)/([A-z0-9_]+)/$ index.php?p1=$1&p2=$2&p3=$3&p4=$4&p5=$5 [QSA,NE,L] RewriteRule ^([A-z0-9_]+)/([A-z0-9_]+)/([A-z0-9_]+)/([A-z0-9_]+)/$ index.php?p1=$1&p2=$2&p3=$3&p4=$4&p5=$5 [QSA,NE,L] RewriteRule ^([A-z0-9_]+)/([A-z0-9_]+)/([A-z0-9_]+)/([A-z0-9_]+)/([A-z0-9_]+)/$ index.php?p1=$1&p2=$2&p3=$3&p4=$4&p5=$5 [QSA,NE,L]
.htaccessを使ってRewriteを効かせてパラメータの制御をしようというものです。
(1)
RewriteEngine On RewriteBase /
お約束です。Rewriteを効かせる宣言です。
ベースをドキュメントルートに設定しています。
(2)
RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.* - [L]
実ファイルがサーバ内に存在していたら、そのファイルへのアクセスを行う設定です。
(3)
RewriteCond %{REQUEST_FILENAME} !-f [OR] RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([A-z0-9_]+)/$ index.php?p1=$1&p2=$2&p3=$3&p4=$4&p5=$5 [QSA,NE,L] RewriteRule ^([A-z0-9_]+)/([A-z0-9_]+)/$ index.php?p1=$1&p2=$2&p3=$3&p4=$4&p5=$5 [QSA,NE,L] RewriteRule ^([A-z0-9_]+)/([A-z0-9_]+)/([A-z0-9_]+)/$ index.php?p1=$1&p2=$2&p3=$3&p4=$4&p5=$5 [QSA,NE,L] RewriteRule ^([A-z0-9_]+)/([A-z0-9_]+)/([A-z0-9_]+)/([A-z0-9_]+)/$ index.php?p1=$1&p2=$2&p3=$3&p4=$4&p5=$5 [QSA,NE,L] RewriteRule ^([A-z0-9_]+)/([A-z0-9_]+)/([A-z0-9_]+)/([A-z0-9_]+)/([A-z0-9_]+)/$ index.php?p1=$1&p2=$2&p3=$3&p4=$4&p5=$5 [QSA,NE,L]
実ファイルがサーバ内に存在していない場合の動作です。
ルートから最大5階層目までのRewriteRuleを設定しています。
例えば
実態ファイルが存在しないのに
/aaa/bbb/ccc/ddd/eee/
にアクセスをすると
/index.php?p1=aaa&p2=bbb&p3=ccc&p4=ddd&p5=eee
にRewriteをかけます。
オプション
QSA | Query String Append | クエリ文字を引数として扱う |
NE | No Escape | URLエスケープを行わない |
L | Last | RewriteRuleをそれ以降の行で適用しない |
利点
これをすると何が都合がいいのか、というと下記の点が上げられます。
- 全てのアクセス(5階層目まで)をルート以下のindex.phpで処理することが可能となる
- 各ページの動きはGETの値として渡される
- コントローラーを作成することができる
こんな感じでしょうか。
深い階層までアクセスされたときに、その階層分だけ引数で渡してあげられる方法はないものでしょうかね?