-1

これ以上短くすることはできませんでした:-/

リダイレクトと $_GET に関して、php プロジェクトで問題が発生しています。

あなたが私を助けてくれることを願っています:)

Web サーバーのルートにこれら 3 つのフォルダーがあるとします。

/root
   /themes
         /page.php
   /project1
         /index.php
         /content.php
   /project2
         /index.php
         /content.php

/themes/page.php
/page.phpには、さまざまなコンテンツ ファイルに使用できる動的な PHP/HTML 構造またはテーマが含まれているという php ファイルが含まれています。

/project1によって/project2含まれるほとんどの HTML コンテンツ ファイルが含まれ/page.phpます。

/project1/project2は 2 つの異なるドメインのルート フォルダーであるため、それぞれにindex.php.

ここでの問題:
各ドメインの Web サイトを機能させるには、ユーザーを にリダイレクトする必要/themes/page.phpがあります。これは、そこに機能があり、正しいコンテンツ ファイルを含めるためです。どのコンテンツファイルから、またはロードする必要があるか
を知るために、次のようにリダイレクトを使用して塗りつぶします。/page.php/project1/project2index.php$_GET

header("Location: root-domain/themes/page.php?path=project1&file=content1");

このようにして、page.php は、要求されたファイルのパスとファイル名を GET から取得することで認識します。

BUT:
そうすれば、ユーザーは、一部の php ファイルであっても、各フォルダーと各ファイル名を知ることができます。いいのかわからないけど?
そして、URL は要求された URL から Web サーバーのルートの URL に変わります。

より良い解決策を知っていますか?

ありがとう!<3

4

1 に答える 1

2

実際には、解決策があると思います。Apache のモジュールである mod_rewrite を使用するだけです。これにより、すべての URL リクエストをこの 1 つの特定のページにリダイレクトできます。残念ながら、mod_rewrite の背後にある「魔法」はもう少し複雑なので、このドキュメントをさらに使用することをお勧めします。

しかし今のところ、サーバー構成で mod_rewrite がオンになっているかどうかを確認してから、ディレクトリproject1 (またはその他) に.htaccessというファイルを作成し、次の小さなコードを挿入します。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^([^/.]+)/?([^/.]+)?/?$ /themes/page.php?path=$1&file=$2 [QSA]
</IfModule>

保存を押してください。それで終わりです。これで、すべてのページ リクエストは/themes/page.phpを通過します。

ところで、URL でスクリプト名を公開するべきではありません。

于 2012-11-03T00:06:20.830 に答える