動的ページを静的ページに偽装する方法

mod_rewriteを使う方法

メリット:正規表現を使ったり、さまざまなことができます。
デメリット:webサーバーにmod_rewriteモジュールが入ってないと使えません。

PHPやCGIのファイルをディレクトリに偽装する方法

http://example.com/aaa/123/

「aaa」というファイルをPHPとして実行させる。

<Files aaa>
ForceType application/x-httpd-php
</Files>

「aaa」というファイルをCGIとして実行させる。

<Files aaa>
ForceType cgi-script
</Files>

偽装したGETパラメータを取得するには、環境変数 PATH_INFO を参照します。
この場合、$ENV{'PATH_INFO'}を参照すると、その内容は「/123」となります。

PHP の場合は、$_SERVER['PATH_INFO']を参照する。

$params = split("/",$_SERVER['PATH_INFO']);
array_shift($params);

$params[0],$params[1]...の順番に、「/」区切りで渡された値が入ります。

CGI の場合は、$ENV{'PATH_INFO'}を参照する。

@params = split(/\//,$ENV{'PATH_INFO'});
shift(@params);

$params[0],$params[1]...の順番に、「/」区切りで渡された値が入ります。

デメリット:トップ階層では使用できません。

404エラーで偽装する方法

ルート階層にhtmlファイルなどを置かず、404エラードキュメントによって動作させます。

ErrorDocument 404 /hoge.php

$_SERVER["REQUEST_URI"]で、ドキュメントルート以下のURIが取れます。

ただし『200 OK』のレスポンスを返す必要があります。
また、実体ファイルが見つからなかったときには、正しい404エラーを返す必要があります。
404エラーのループに気をつける必要があります。

<?php
header("HTTP/1.1 200 OK");
?>

PHPの注意

php.iniを次のようにしておかないと、レスポンスからPHPで生成したことがばれます。

expose_php = Off

PHPのバージョン表記の隠蔽

関連記事

スポンサーリンク

$compiler_classクラス変数 コンパイルに使用するコンパイラクラスの名前

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る