3

Webサイトで要求されたすべてのフォルダーをパラメーターとして渡すスクリプトを作成したいと思います。

たとえば、誰かが要求した場合:

www.example.com/foo

...これはメインのindex.phpにリダイレクトされ、パラメーターとして渡され、リクエスト時に同じ結果が得られますwww.example.com/index.php?foo

要求されたフォルダーはランダムであるため、フォルダーを予測してそこにphpスクリプトを配置することはできません。

HTACCESSを介してすべての404リクエストを処理する必要がありますか?または、より優れたソリューションがありますか?

4

5 に答える 5

6

あなたのURLfooにはパラメータキーがあります、あなたがそれをそのようにするつもりなら、それはどのような値を持っているでしょうか?

おそらく、リクエストを処理するルーティングスクリプトにURL全体を渡すルーティング構造と混同している可能性があります

あなたが探している書き直しはこれです:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]

次に、インデックスで次のようにURLを分割します。

<?php 
$parts = isset($_GET['route']) ? explode('/',$_GET['route']) : array();
?>

次に、URLの例は次のようになります。 www.example.com/foo/bar/baz

$parts[0] = foo
$parts[1] = bar
$parts[2] = baz

次に、フォルダ/ファイルの存在を探している場合は、次のようになります。

<?php 
if (isset($parts[0]) && file_exists('./'.basename($parts[0]))) {
    //Folder or file exists
} else {
    //Folder or file does not exist - 404
}
?>
于 2012-05-03T03:32:54.653 に答える
4

htaccessを使うのが解決策だと思います。

RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php?$1 [L]

これにより、index.php、images、robots.txtが続かないURLが/index.php?{DIRORVARS}に書き換えられます。

于 2012-05-03T03:31:44.057 に答える
0

必要なのはurlrewriteと呼ばれます。ネットにはそれに関する情報がたくさんあります。

于 2012-05-03T03:23:59.193 に答える
0

Apacheを使用していると思います。

本当に必要なのはRewriteRuleのようです。ここで、mod_rewriteを確認してください:http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html

于 2012-05-03T03:24:16.510 に答える
0

あなたが探しているのは「ルーティング」と呼ばれ、URLの「フォルダ」が「セグメント」と呼ばれるパラメータに変換されます。

私の知る限りindex.php、パスの残りの部分が解析される最上位レベルの「エントリポイント」が必要です。

http://example.com/index.php/foo/bar/baz
                      ^----entry point

index.phpパーツはサーバーの書き換えルールを介して削除でき、

http://example.com/foo/bar/baz

またはサーバーのURL書き換えファイルindex.phpを編集するのではなく、PHPで「urlパーサー」ロジック(通常はインクルードとしてロードされる)のみを編集するため、これはより「スケーラブルな」方法です。.htaccessこれにより、特にサーバーの構成ファイルの編集を許可しないホスティングサイトで、ルーティングをより細かく制御できます。

于 2012-05-03T03:26:09.667 に答える