Symfony3路由无法与Web根配置一起使用

时间:2017-04-01 14:18:13

标签: php symfony symfony-routing

我正在尝试将一些新的Symfony3应用程序集成到现有的Web空间中。在我的webroot / html中,每个应用程序都有自己的目录。这些应用程序中的每一个都可以是任何东西 - cakePHP,自定义PHP,等等。每个都通过像localhost / appname这样的URL访问。这种结构不灵活,我无法再向vhosts或类似的东西添加URL模式。

因此,我在/ symfony安装了我的Symfony3,它是/ 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

2 个答案:

答案 0 :(得分: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-subfolder中的文件,并且没有条目脚本,因此它将无法工作。根据您的设置,您可能甚至没有权限重写每个.htaccess或您的服务器配置中的URL,这会使事情进一步复杂化。现在让我们假设web /中的.htaccess文件确实有效,这只是你的url所指向的错误文件夹的问题。

如果您希望在http://example.com/symfony/(无网页/部分)访问网址,则可以使用多个选项。 Symfony的项目结构实际上非常灵活,您可以摆脱symfony / web / -folder,而是使用symfony /作为您的Web根目录。例如,某些安装脚本可能会出现一些问题,这些脚本会将css和js等资源复制到您的Web根目录中。当捆绑包指向网络目录时,您也可能遇到问题,例如,用于存储上传。您可能需要进行一些调整,但是通过将所有文件从Web移动到父文件夹(包括可能隐藏的.htaccess),可以立即进行基本设置。

另一种选择可能是在symfony的项目根目录中创建一个新的.htaccess,指向web/app.php而不是app.php。您可以将现有文件作为参考。我尽量避免使用htaccess文件,如果我可以尝试的话,现在没有设置,但在移动大量文件之前可能值得一试。虽然您仍可能遇到路径未正确匹配的资产问题。

编辑:另一个可能更有用的选项,但如果你想从其他现有的网络应用程序迁移到一个Symfony应用程序可能会有用,将symfony移动到与html /相同的级别并移动所有的东西从web /到html /。现在,您的服务器的Web根目录也是symfony的Web根目录(再次,您可能不得不摆弄期望位于名为web /的文件夹中的资产)。现在,您只需确保每当Symfony找不到路由时,它都会将请求传递给您的其他应用。有几点需要注意,它比上面的两种方法要多得多,但是它们可能很有用。如果你对这条路线感兴趣的话,去年柏林的SymfonyCon就如何做到这一点进行了很好的讨论:

不幸的是,谈话的视频还没有出来。

答案 1 :(得分:0)

我找到的解决方案是为每个Web应用程序添加自定义内核。因此,对于我在webroot /var/www/html下的每个文件夹,我在Symfony中添加了一个新的内核。每个内核都有自己的路由和配置文件,这解决了我的路由问题!我按照这个symfony doc来设置内核:http://symfony.com/doc/current/configuration/multiple_kernels.html

<强> App1的:

  • webroot:/var/www/html/app1/index.php包含典型的app.php代码,用于初始化App1内核:$kernel = new App1Kernel('dev', true);
  • symfony详细信息:在app/config中,我为每个内核添加了一个目录,因此这将是app/config/app1。我将所有配置,路由,服务文件复制到此目录中,并引用该应用程序的自定义Bundle。

<强> App2的:

  • webroot:/var/www/html/app2/index.php包含典型的app.php代码,用于初始化App1内核:$kernel = new App2Kernel('dev', true);
  • symfony详细信息:在app/config中,我为每个内核添加了一个目录,因此这将是app/config/app2。我将所有配置,路由,服务文件复制到此目录中,并引用应用程序的自定义Bundle,并将对Bundles的任何引用更改为相应的包。