我有一个非常遗留的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 ...没有前端控制器。所有页面都可以直接访问。
总而言之,一次重构太多了,所以我想在peices中做,一次一页。
我想要做的是在我现在拥有的基础上安装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规则来尝试在/ www和/ www / dashboard中创建Apache服务文件。这些失败了,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根目录的地方。它不会访问/ www或/ www / dashboard中的任何内容,它位于Web根目录之外。
我正在尝试使用.htaccess导致Apache从Web根目录下载文件,或者让Symfony将这些页面作为通用的PHP脚本提供。
答案 0 :(得分: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]