行きたいとしましょう
http://example.com/something/a/few/directories/deep
これらのディレクトリを作成せずにPHPでこれを処理できる方法はありますか?ドメイン名の後のすべてを変数として取得し、そこから作業したいだけです。
行きたいとしましょう
http://example.com/something/a/few/directories/deep
これらのディレクトリを作成せずにPHPでこれを処理できる方法はありますか?ドメイン名の後のすべてを変数として取得し、そこから作業したいだけです。
これを行う最も一般的な方法は、mod_rewrite を使用することです。( http://articles.sitepoint.com/article/guide-url-rewritingの紹介にあります)。これにより、これらのわかりやすい URL を、PHP スクリプトに渡されるクエリ パラメータに内部的にマッピングできます。
もちろん。mod_rewrite
開始が一定であるか、可能な値がわずかしかない場合でも、必要ありません。(拡張子なし)という名前の php ファイルを作成something
し、Apache に (SetHandler
または同様のディレクティブを介して) PHP として扱うように指示します。次に、IIRC$_SERVER['PATH_INFO']
のようなスクリプトで調べます。a/few/directories/deep
それを使用して、リクエストを好きなようにルーティングできます。
あるいは。マーティンが言うように、単純なmod_rewrite
ルールを使用して に書き換えると/dispatch.php/something/a/few/directories/deep
、パス全体がPATH_INFO
.
このようなシナリオを処理するために mod_rewrite は必要ありません。現在、一般的な PHP フレームワークのほとんどは、URI セグメントの解析をサポートしています。これは単純な例であり、修正が必要なセキュリティ ホールがいくつか残っています。
これは、グローバルな $_SERVER 変数の 1 つを取り、次のようにスラッシュで分割することで処理できます。
if (!empty($_SERVER['REQUEST_URI'])) {
$segments = explode('/', $_SERVER['REQUEST_URI']);
}
$segments変数には、反復するセグメントの配列が含まれるようになりました。
Apacheを使用していると仮定します...
すべてを index.php に向けるように、書き換えルールを (vhost conf に、または単に .htaccess ファイルをドキュメント ルートにドロップして) 追加します。次に、index.php 内で、リクエスト URI を解析し、パスを抽出します。
RewriteEngine on
RewriteRule ^.*$ index.php [L,QSA]
index.php:
$filepath = $_SERVER['REQUEST_URI'];
$filepath = ltrim($myname, '/'); //必要に応じて先頭のスラッシュを取り除きます。
これは実際には PHP5 関連の質問ではありません。URL の書き換えは Web サーバーの一部です。
Apache でmod_rewriteを使用するとできます(IIS については知りませんが、似たようなものがある可能性があります)。