0

Symfony に更新しようとしている非常に古い php アプリケーションがあります。

アプリケーションは現在、次のような構造になっています。

/www                        <-current web root
php_page1.php
php_page2.php
php_pagen.php
    /dashboard
    dashboard_page1.php
    dashboard_page2.php
    dashboard_pagen.php

ページには、関数などでいっぱいのヘルパー ファイルがあり、アセットでいっぱいのフォルダーもいくつかありますが、それはあまり重要ではありません。したがって、特定のページにアクセスするには、ブラウザで domain.com/php_page1.php または domain.com/dashboard/dashboard_page1.php を指定します... フロント コントローラーはありません。すべてのページに直接アクセスします。

全体として、一度にリファクタリングするには多すぎるので、一度に 1 ページずつ分割して行いたいと考えています。

私がやりたいことは、symfony を現在持っているものの上にインストールすることです。これにより、symfony 構造は現在ここにあるものと共存します。

/www                        <-legacy
php_page1.php               <-legacy
php_page2.php               <-legacy
php_pagen.php               <-legacy
    /app                    <-symfony
    /dashboard              <-legacy
        dashboard_page1.php <-legacy
        dashboard_page2.php <-legacy
        dashboard_pagen.php <-legacy
    /src                    <-symfony
    /web                    <-symfony (new web root)
        .htaccess           <-symfony (points to app.php)
        app.php             <-symfony (front controller)

Symfony を正常にインストールし、サンプルのレガシー ページを移行しました (Web ルートが移動したことに注意してください)。これはうまくいきます。

問題は、最終的に、レガシー ページが存在する場合はそれらを提供し、存在しない場合はフロント コントローラー (app.php) を通過するために Apache が必要なことです。

これが私が試したことです。

さまざまな .htaccess ルールを試して、Apache が /www および /www/dashboard のファイルを提供できるようにしました。これらは失敗し、Symfony は一致するルートがないことを教えてくれます。

Symfony も試しまし$this->redirect('..\www\php_page1.php');た。これは失敗し、Symfony は「構成されたディレクトリの外でテンプレートを読み込もうとしたようです」と言ってきます。

最後に、ルートとして /dashboard を追加しようとしました:

/**
 * @Route("/cvdashboard/{file}")
 */
public function cvdashboardAction($file)  {
    return $this->render("@dashboard/$file");
}

小枝のパスを追加しました:

twig:
    ...
    paths:
      '%%kernel.root_dir%/../dashboard':dashboard

これには 3 つの例外があります。

FileLoaderLoadException in FileLoader.php118行目:

InvalidArgumentException in YamlFileLoader.php371行目:

ParseException in Inline.php108行目:

質問

だから私の質問は:現在存在するURLが呼び出された場合(つまり、domain.com/php_page1.php)、SymfonyまたはApacheを介して直接そのページを提供するようにSymfony / Apacheを構成するにはどうすればよいですか? Symfony のフロントコントローラーにリクエストを処理させますか?

編集

私が現在持っている .htaccess は次のとおりです。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . app_dev.php [L]

これは Symfony で機能し、ルートが定義されているものはすべてルーティングします。問題は、それが /www/web (新しい Web ルート) にあることです。これは、Symfony が Web ルートを配置したい場所です。Web ルートの外にある /www または /www/dashboard にはアクセスしません。

.htaccess を使用して、Apache に Web ルートから 1 レベル下のファイルを取得させるか、Symfony にそれらのページを一般的な php スクリプトとして提供させようとしています。

4

1 に答える 1

0

そのために mod_rewrite を使用できます。

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d # not an existing dir
RewriteCond %{REQUEST_FILENAME} !-f # not an existing file

# redirect to the symfony app.php file
RewriteRule ^(.*)$ www/app.php [L]
于 2016-12-02T00:03:00.497 に答える