mod_rewriteは便利だけど、その条件数が膨大になったり、
.htaccessファイルがいろんなフォルダに散乱すると大変なことになる。
$_SERVER[“REQUEST_URI”]を使って、URLを整理する方法(Apache 2.0.30 以降で可能)があるらしいということで実験。
まずは、スラッシュなどの記号がURLエンコードされた(%2F)がURLに含まれる場合、うまく動かなくなるらしいので
AllowEncodedSlashes On
を、httpd.confに追記する。
httpd.conf
<VirtualHost *:80>
ServerName localhost
AllowEncodedSlashes On
</VirtualHost>
こんなファイルを用意する。
a
<php
$args = explode("/",$_SERVER["REQUEST_URI"]);
$args = array_map('urldecode', $args);
$args = array_map('htmlspecialchars', $args);
print_r($args);
?>
拡張子が残っていると見栄えが悪いので、以下の.htaccessを置いておく。
.htaccess
<FilesMatch "^a$" >
ForceType application/x-httpd-php
</FilesMatch>
試しにこのURLにアクセスしてみる。
http://localhost/example.com/test/cool-uri/a/test/%2F
出力結果
Array
(
[0] =>
[1] => example.com
[2] => test
[3] => cool-uri
[4] => a
[5] => test
[6] => /
)
$args[5]とか$args[6]とかを使って分岐処理したらいいだけだね!
おーし、サーバーにアップしてみようかな!
AcceptPathInfo ディレクティブ
説明: 後に続くパス名情報を受け付けるリソースの指定
構文: AcceptPathInfo On|Off|Default
デフォルト: AcceptPathInfo Default
コンテキスト: サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess
上書き: FileInfo
ステータス: Core
モジュール: core
互換性: Apache 2.0.30 以降で使用可能
さくら: Apache/1.3.39
XREA: Apache/1.3.39
(´・ω・`)