0

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

因此,我将 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

4

2 回答 2

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/(没有 web/-part)上可以访问 url,您有多种选择。Symfony 的项目结构实际上非常灵活,您可以摆脱 symfony/web/-文件夹,而使用 symfony/ 作为您的 web 根目录。可能会有一些陷阱,例如一些安装脚本将 css 和 js 等资源复制到您的 web 根目录中。当捆绑包指向 web 目录时,您也可能会遇到问题,例如用于存储上传。您可能需要进行一些调整,但通过将所有文件从 web 移动到父文件夹(包括可能隐藏的 .htaccess),应该可以立即进行基本设置。

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

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

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

于 2017-04-01T18:24:52.440 回答
0

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

应用程序1:

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

应用 2:

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