0

URL構造に基づいてさまざまなコンテンツを提供したいindex.phpファイルがあります。

例えば。URLがmysite.com/index.php/folder1の場合、特定のクエリを実行して結果を表示し、URLがmysite.com/index.php/folder2の場合は、別のクエリを実行します。

このソリューションは、mysite.com / folder1などでも機能する必要があります(つまり、index.phpは省略されています)。

また、同じアプローチをmysite / com / folder1 / category1などに拡張できれば理想的です。ここでは、GET変数は必要ありません。

4

3 に答える 3

2

必要なのは、URLをコード内のクラス/関数にリンクするルーティングコンポーネントです。このコンポーネントは、要求に応じて特定のクラス/関数を実行します。 この質問では、さまざまな戦略について説明しますが、興味深い既存のフレームワークがいくつか欠落しています。

これらのいずれかを使用して、前述したことを正確に実行できます。たとえば、Symfony Routing Componentを使用すると、次のような構成ファイルにルート(潜在的なURL)を含めることができます。

# routes.yml
route1:
    path:     /foo
    defaults: { _controller: 'MyController::fooAction' }

route2:
    path:     /foo/bar
    defaults: { _controller: 'MyController::foobarAction' }

したがって、要求されたURIが「/ foo」と一致すると、クラスMyControllerのメソッドfooActionが実行されます。これを既存のコードベースに実装する方法がわからない場合は、Fabien Potencierによって書かれた、コードでさまざまなSymfonyコンポーネントを使用する方法に関する一連の投稿を読むことを強くお勧めします。ルーティング部分に関する特定の投稿があります。

URLから「index.php/」を削除する必要がある場合は、書き直す必要があります。Apacheを使用している場合は、仮想ホスト構成ファイルに書き換えルールを追加するか、ドキュメントルートに.htaccessファイルを作成する必要があります。StackOverflowにはこれに関する何百もの質問があり(このようなもの)、公式のドキュメントページにはたくさんのドキュメントがあります。

于 2013-03-26T10:43:42.067 に答える
0

おそらく最良の方法は、ブラウザで変数を割り当てることです。例えば

index.php?folder=1      AND index.php?folder=2

phpでは、次を使用します。

$folder = $GET_['folder']
if($folder == 1)
{
    //show site 1
}
else if ($folder == 2)
{
    //show site 2
}
else
{
    //error code
}

.htaccessを含む他の方法がありますが、それには入りたくない人にとっては、これが最良の方法であることがわかりました

于 2013-03-26T10:45:33.913 に答える
0

次のRewriteRuleを.htaccessファイルに追加し、.htaccessファイルをWebルートに配置します

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

上記のルールは、システムにファイル/ディレクトリが存在しない場合、すべてのリクエストをindex.phpにリダイレクトします。

たとえば、上記のルールがないと、http://example.com/testが404エラーを返した場合、上記のリダイレクトルールを使用すると、これはindex.phpに解決されます。これで、index.php内で、URLを解析し、要件に従って処理を行うことができます。

于 2013-03-26T10:47:30.683 に答える