0

我有一个非常旧的 php 应用程序,我正在尝试更新到 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 ......没有前端控制器。所有页面都可以直接访问。

总而言之,一次要重构的东西太多了,所以我想分批进行,一次一页。

我想要做的是在我现在拥有的之上安装 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 根目录)。这很好用。

问题是,最终,如果存在遗留页面,我需要 Apache 来提供服务,如果不存在,则通过前端控制器 (app.php)。

这是我尝试过的。

我尝试了各种 .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

这导致了三个例外:

FileLoaderLoadException in FileLoader.php第 118 行:

InvalidArgumentException in YamlFileLoader.php第 371 行:

ParseException in Inline.php第 108 行:

问题

所以我的问题是:如何配置 Symfony / Apache 以便如果调用当前存在的 url(即 domain.com/php_page1.php),它将直接通过 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 根目录下一层抓取文件,或者让 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 回答