0

行きたいとしましょう

http://example.com/something/a/few/directories/deep

これらのディレクトリを作成せずにPHPでこれを処理できる方法はありますか?ドメイン名の後のすべてを変数として取得し、そこから作業したいだけです。

4

5 に答える 5

2

これを行う最も一般的な方法は、mod_rewrite を使用することです。( http://articles.sitepoint.com/article/guide-url-rewritingの紹介にあります)。これにより、これらのわかりやすい URL を、PHP スクリプトに渡されるクエリ パラメータに内部的にマッピングできます。

于 2009-10-27T23:31:21.103 に答える
2

もちろん。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.

于 2009-10-27T23:34:09.023 に答える
1

このようなシナリオを処理するために mod_rewrite は必要ありません。現在、一般的な PHP フレームワークのほとんどは、URI セグメントの解析をサポートしています。これは単純な例であり、修正が必要なセキュリティ ホールがいくつか残っています。

これは、グローバルな $_SERVER 変数の 1 つを取り、次のようにスラッシュで分割することで処理できます。

if (!empty($_SERVER['REQUEST_URI'])) {
    $segments = explode('/', $_SERVER['REQUEST_URI']);
}

$segments変数には、反復するセグメントの配列が含まれるようになりました。

于 2009-10-27T23:32:05.127 に答える
1

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, '/'); //必要に応じて先頭のスラッシュを取り除きます。

于 2009-10-27T23:45:36.853 に答える
0

これは実際には PHP5 関連の質問ではありません。URL の書き換えは Web サーバーの一部です。

Apache でmod_rewriteを使用するとできます(IIS については知りませんが、似たようなものがある可能性があります)。

于 2009-10-27T23:30:20.373 に答える