0

私は自分のphp mvcフレームワークのスタイルを変更しています。

デフォルトでは、すべてのリクエストが /index.php によって処理されます。これにより、ルーティングの mvc プロセスがトリガーされ、リクエストが実行され、適切なビューが返されます。各リクエストは、単一の 'q' GET パラメータ、drupal スタイルに従ってルーティングされます。

/index.php?q=anApplication/aController/theAction/arg1/.../moreArguments

これはかなりうまく機能し、mod_rewrite を介してきれいな URL を簡単に作成できます。Ok。

次のようなディレクトリ ツリーがあります。

/public
    |----themeName
    |--------|
             |----page.tpl
             |----content.tpl
             |----etc.    
/private
    |----sourceDirectory
    |----moreSources

私が望んでいないのは、プライベートおよびパブリックディレクトリに保存されたファイルがHTTPリクエストのように直接提供されることです:

mySrv/パブリック/テーマ名/page.tpl

私のコアハンドラーであるindex.phpをバイパスして、デッドテンプレート、または画像ではないリソースを表示します。

このような書き換え構成で何かを達成できると思います

RewriteEngine on
RewriteBase /
RewriteRule  ^(.*)$ index.php?q=$1 [QSA,L]

ただし、フレームワークは mod_rewrite が有効なサイトでのみ機能します。これは、既存および非存在のすべてのリソースを書き換えるためです。

私が求めているのは、私の選択した既存または非存在のリソース (index.php など) によって提供されるすべてのリクエストを作成する別の方法はありますか?

ありがとうございました

4

2 に答える 2

4

すべてのテンプレートなどをpublic_htmlフォルダーの外に保存するだけです。

これにより、PHPはアクセスできるようになりますが、外部はファイルにアクセスできません。

于 2012-12-12T17:39:49.540 に答える
1

index.php最も簡単で移植性の高い方法は、ドキュメント ルート以外のすべてをプルすることです。PHP は引き続きファイルをインクルードし、他のすべてのことを行うことができます。

私はこれを試していませんが、index.php を古いドキュメント ツリーの外に置くと、

---/ app / new-index.php
   |
   / public / 
   |
   / private / ...
   |
   index.php

そして、の先頭に追加しますnew-index.php

<?php
    chdir('..');
    require 'index.php';
?>

そして最後に Apache を再構成して DocumentRoot が実際/app

: HTTP リダイレクトを除いて、「すべてが機能するはずです」 。解釈されていない PHP ファイルを FS から読み取ることはできますが、解釈されたコンテンツを、たとえば localhost の Apache から取得することはできなくなります。DOCUMENT_ROOTまた、既存のコードがグローバル変数を使用していないことを確認する必要があります。必要に応じて上書きできます。

于 2012-12-12T17:40:48.110 に答える