2017-04-01 58 views
0

我想將一些新的Symfony3應用程序集成到現有的網絡空間。在我的webroot/html中,每個應用都有自己的目錄。這些應用程序中的每一個都可以是任何東西 - cakePHP,自定義PHP,無論如何。並且每個都通過像localhost/appname這樣的URL訪問。這種結構不夠靈活,我無法再向URL添加URL模式或類似的東西。Symfony3路由不能使用網頁根配置

因此,我將Symfony3安裝在/ symfony中,它是/ html的兄弟目錄。/html內部我的Symfony應用程序有一個登陸目錄:/ html/symfonyapp。

在/html/symfonyapp/index.php我有一個代碼唯一行: require_once DIR.'/../../symfony/web/app.php';

在我Symfony的成立,我有一個名爲SymfonyappBundle束。我在src/SymfonyappBundle/Resources/config/routing.yml中配置了一個路由,以將調用重定向到/ symfonyapp到這個特定的Bundle。

路由不起作用。撥打http://localhost/symfonyapp的呼叫總是以「/」結束。我覺得它與我的Symfony安裝無關,而是與通過/html/Symfonyapp/index.php文件進入的請求有關。

任何幫助,非常感謝!

編輯:我看是有幫助的所以這裏列出的目錄結構: - /var/www/html <-- this is your (global) web root |- cake-app |- custom-php-app |-symfonyapp |—index.php (which contains only a require for app.php) -/var/www/symfony <—symphony standard install here |- app/ |- vendor/ |- src/ |- web/ <-- the web root for your symfony-app |- .htaccess |- app.php <-- the "boot"-script similar to index.php

回答

0

我希望我有這個權利。您的目錄結構看起來是這樣的:

- /var/www/html <-- this is your (global) web root 
|- cake-app 
|- custom-php-app 
|- symfony <-- the project root for you symfony-app 
|- app/ 
|- vendor/ 
|- src/ 
|- web/   <-- the web root for your symfony-app 
    |- .htaccess 
    |- app.php  <-- the "boot"-script similar to index.php 

所以基本上你有一個典型的Symfony的應用程序,但它位於一個共享的Web根內。所以當訪問它時,你不會去http://example.com/,而是去http://example.com/symfony/web/

這可能是你遇到的第一個問題。您的應用程序必須從Web文件夾訪問,而不是從symfony文件夾訪問。例如,根據/var/www/html/.htaccess中的某些重寫規則,您可能無法查看symfony子文件夾中的文件,並且沒有輸入腳本,因此它不起作用。依賴於你的設置,你可能甚至沒有權限重寫每個.htaccess的url或者在你的服務器配置中,這會讓事情更加複雜。現在讓我們假設web /中的.htaccess文件起作用,它只是你的URL指向的錯誤文件夾的問題。

如果您想要訪問網址http://example.com/symfony/(不含網頁/部分),您有多種選擇。 Symfony的項目結構實際上非常靈活,你可以擺脫symfony/web/-folder,而是使用symfony /作爲你的web根目錄。例如,一些安裝腳本可能會將一些資源(如css和js)複製到Web根目錄中。當bundle指向web目錄時,你也可能遇到問題,例如,用於存儲上傳。您可能需要做一些調整,但通過將所有文件從網絡移動到父文件夾(包括可能隱藏的.htaccess),基本設置應該很快就可以實現。

另一種選擇可能是在symfony的項目根目錄下創建一個新的.htaccess,它指向web/app.php而不是僅僅是app.php。您可以將現有文件作爲參考。我儘量避免使用htaccess文件,現在沒有設置,我可以試試它,但在移動大量文件之前可能值得一試。儘管您仍然可能遇到路徑未正確匹配的資產問題。

編輯:另一個選項可能更多的工作,但如果你想從其他現有的web應用程序遷移到Symfony應用程序,可能會有用,將symfony移動到與html /相同的級別,並將所有東西從網絡/到HTML /。現在你的服務器的web根目錄也是symfony的web根目錄(你也可能不得不擺弄資源預期位於名爲web /的文件夾)。現在您只需確保每當Symfony找不到路由時,它都會將請求傳遞給其他應用程序。有幾件事值得注意,它比上面兩種方法有更多的工作,但是可以是有用的。有一個很好的談論它在去年的SymfonyCon在柏林就如何做到這一點,如果你有興趣在這條航線:

不幸的是,談話的視頻還沒有出來。

+0

對於那個痛苦的評論過程感到抱歉。我已將dir結構添加到原始帖子中。問題不在於我無法找到symfony目錄。但是,我只能訪問默認路由,而不是任何自定義路由。一切都只是通過symfony中的默認路由。 –

+0

在這種情況下,請嘗試將內容從網絡移至symfonyapp。您可能必須調整app.php中的某些路徑,例如自動裝載機的位置。在路徑的開頭添加另一個「../」可能就足夠了。 – dbrumann

+0

如果htaccess不起作用,並且您的app.php沒有被用來代替索引。嘗試將它的內容複製到index.php(並且爲了安全地更新.htaccess來指向index.php)。 – dbrumann

0

我發現的解決方案是爲每個Web應用程序添加一個自定義內核。所以對於我的webroot /var/www/html下的每個文件夾,我在Symfony中添加了一個新的內核。每個內核都有自己的路由和配置文件,解決了我的路由問題!我跟着此symfony的文檔來建立內核:http://symfony.com/doc/current/configuration/multiple_kernels.html

App1的:

  • 根目錄:/var/www/html/app1/index.php具有典型app.php碼在它它初始化App1的內核爲這樣:$kernel = new App1Kernel('dev', true);
  • symfony的詳細信息:在app/config我爲每個內核添加了一個目錄,所以這將是app/config/app1。我將所有配置,路由,服務文件複製到此目錄中,並引用應用程序的自定義Bundle。

App2的:

  • 根目錄:/var/www/html/app2/index.php具有典型app.php碼在它它初始化App1的內核爲這樣:$kernel = new App2Kernel('dev', true);
  • symfony的細節:在app/config我每內核添加一個目錄,所以這將是app/config/app2。我將所有配置,路由,服務文件複製到該目錄中,並引用應用程序的自定義Bundle,並將Bundles的任何引用更改爲適當的包。