2016-12-01 5 views
0

私は非常にのsymfonyに更新しようとしている従来のPHPアプリケーションを持っています。ファイルが存在する場合はApacheが要求を処理します。それ以外の場合はSymfonyフロントコントローラ経由でルーティングします

アプリケーションは現在、これと同様の構造を有する:

/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のをインストールし、サンプルを移行しました従来のページオーバー(ウェブルートが移動したことに注意してください)。これは素晴らしいです。

問題は、最終的に、既存のページが存在する場合はApacheに、最後に存在しない場合はフロントコントローラ(app.php)を経由する必要があります。

ここで私が試したことがあります。

私は様々な.htaccessルールを試して、Apacheの/ wwwと/ www/dashboardのファイルを提供しようとしました。これらは失敗し、Symfonyは私にマッチするルートがないと言っています。

私はまた、Symfonyの$this->redirect('..\www\php_page1.php');を試しました。これはsymfonyが "設定されたディレクトリの外にテンプレートをロードしようとしたようです"と言って失敗します。

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

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

は最後に、私は、ルートとして/ダッシュボードを追加しようとしました

FileLoaderLoadException in FileLoader.phpライン118:

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

これは、3つの例外をyealds

InvalidArgumentException in YamlFileLoader.phpライン371:

ParseException in Inline.phpライン108:

質問

だから私の質問は次のとおりです。 はどのように設定することができsymfonyの/ Apacheのように現在存在しているURLが呼び出された場合(すなわち、 domain.com/php_page1.php)それはSymfonyかApacheのどちらかを介して直接そのページを提供し、もし存在しなければ、Symfonyのフロントコントローラにリクエストを処理させますか?

EDIT

がここにあります。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を使用して、Webルートから1レベル下のファイルを取得するか、symfonyがそれらのページを汎用のPHPスクリプトとして提供するようにします。

答えて

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] 
+0

感謝を。私は実際にはすでに非常に似た.htaccessファイルを使用しています。問題はそれが/ www/webにあることです。私は/ wwwと/ www/dashboardから普通の古いPHPスクリプトを提供する必要があります。 – mcmurphy

+0

'www'ディレクトリと' www/web'ディレクトリに異なる '.htaccess'ファイルを使うことができます。 – Dekel

+0

Webrootを/ wwwにする必要がありますか? – mcmurphy

関連する問題