1

次のように、すべてのフォルダーが public_html の下にある Web アプリケーションがありました。

public_html
  -pages
  -templates
  -includes
  -styles
  -scripts
  -images
   index.php

だから私のウェブサイトは完璧に機能し、ライブサーバー(php 5.2.17バージョン)で動作しました。しかし、オブジェクト指向のアプローチに切り替えたいと思い、すべてを変更し、zendフレームワーク構造モデルから学び、インスピレーションを得ようとしたので、フォルダー構造を変更しましたApache でローカルに完璧に機能しました。新しい構造は次のとおりです。

アプリケーション-   モデル -コントローラー -ビュー -設定 -レイアウト -   テンプレート   ライブラリ     - 関数   public_html
  - スタイル   -    スクリプト   -   画像   index.php












それで、私はそれをライブサーバーに転送しました、そして今私のメインアプリケーションはルート(public_html)の外にあり、もちろん私は上のルートフォルダ(アプリケーション、ライブラリ)にアクセスできません public_html そしてもちろん index.php から url
それらを含めることはできますが、たとえば、アプリケーションフォルダー内にあるビューフォルダー内の login.php にアクセスする場合、アンカータグのURLでアクセスする必要があります。また、(ajax 呼び出しなどのために) URL 経由でスクリプト フォルダーからコントローラー フォルダーにアクセスする必要があります。
.htaccessファイルを使用する必要があることを読みましたが、どのルールを使用すればよいか、どこにどのように配置すればよいかわかりません.緊急に必要なので誰か助けてください. 私は何をすべきか教えてください。
よろしく

4

2 に答える 2

2

あなたは間違っています。MVC フレームワーク (Zend など) を詳しく見てみましょう。すべてが public フォルダー内の index.php を通過します。URL 経由で public フォルダー以下にアクセスする必要はありません (実際には、セキュリティ上の理由から禁止されているはずです)。内部プログラム構造と書き換えルールを介してコントローラーのアクションにアクセスします。通常、すべてのリクエストは強制的に index.php にルーティングされ、アプリケーションはさらに進む先を決定します。

于 2012-12-16T17:56:58.460 に答える
0

MVC フレームワークである CodeIgniter が独自のindex.phpファイルでファイル ルーティングを処理する方法を見てください。

$system_path = 'システム';
$application_folder = 'アプリケーション';
$view_folder = '';

/*
 * -------------------------------------------------- --------------
 * 信頼性を高めるためにシステム パスを解決する
 * -------------------------------------------------- --------------
 */

    // CLI リクエスト用に現在のディレクトリを正しく設定します
    if (定義済み('STDIN'))
    {
        chdir(dirname(__FILE__));
    }

    if (($_temp = realpath($system_path)) !== FALSE)
    {
        $system_path = $_temp.'/';
    }
    そうしないと
    {
        // 末尾にスラッシュがあることを確認します
        $system_path = rtrim($system_path, '/').'/';
    }

    // システム パスは正しいか?
    if ( ! is_dir($system_path))
    {
        header('HTTP/1.1 503 サービスを利用できません。', TRUE, 503);
        exit('システム フォルダのパスが正しく設定されていないようです。次のファイルを開いて修正してください: '.pathinfo(__FILE__, PATHINFO_BASENAME));
    }

/*
 * -------------------------------------------------- ------------------
 * パスがわかったので、メイン パス定数を設定します。
 * -------------------------------------------------- ------------------
 */
    // このファイルの名前
    define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME));

    // システム フォルダへのパス
    define('BASEPATH', str_replace('\\', '/', $system_path));

    // フロントコントローラーへのパス (このファイル)
    define('FCPATH', str_replace(SELF, '', __FILE__));

    // 「システムフォルダ」の名前
    define('SYSDIR', trim(strrchr(trim(BASEPATH, '/'), '/'), '/'));

    // 「アプリケーション」フォルダへのパス
    if (is_dir($application_folder))
    {
        if (($_temp = realpath($application_folder)) !== FALSE)
        {
            $application_folder = $_temp;
        }

        define('APPPATH', $application_folder.'/');
    }
    そうしないと
    {
        if ( ! is_dir(BASEPATH.$application_folder.'/'))
        {
            header('HTTP/1.1 503 サービスを利用できません。', TRUE, 503);
            exit('アプリケーション フォルダのパスが正しく設定されていないようです。次のファイルを開いて、これを修正してください: '.SELF);
        }

        define('APPPATH', BASEPATH.$application_folder.'/');
    }

    // "views" フォルダへのパス
    if ( ! is_dir($view_folder))
    {
        if ( ! empty($view_folder) && is_dir(APPPATH.$view_folder.'/'))
        {
            $view_folder = APPPATH.$view_folder;
        }
        elseif ( ! is_dir(APPPATH.'views/'))
        {
            header('HTTP/1.1 503 サービスを利用できません。', TRUE, 503);
            exit('ビュー フォルダのパスが正しく設定されていないようです。次のファイルを開いて、これを修正してください: '.SELF);
        }
        そうしないと
        {
            $view_folder = APPPATH.'ビュー';
        }
    }

    if (($_temp = realpath($view_folder)) !== FALSE)
    {
        $view_folder = realpath($view_folder).'/';
    }
    そうしないと
    {
        $view_folder = rtrim($view_folder, '/').'/';
    }

    define('VIEWPATH', $view_folder);

に依存しない.htaccessでください。 が利用できない環境で問題が発生する可能性がmod_rewriteあります。

views/さらに、ハイパーリンクからディレクトリにファイルをロードしないでください。index.php からのページに対するこれらすべてのリクエストを にルーティングし、controllers/それらのクラスを使用してファイルをロードしますアイデアについては、CodeIgniter のソースをもう一度よく見てください。

于 2012-12-16T17:57:36.497 に答える