日別アーカイブ: 2008年7月8日

mod_rewriteを使わないcoolなurlの作り方

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

(´・ω・`)