gpt4 book ai didi

php - 在子目录中使用反向代理运行 Symfony 5

转载 作者:行者123 更新时间:2023-12-03 21:11:25 26 4
gpt4 key购买 nike

我喜欢在提供以下端点的反向代理后面运行 Symfony 5 应用程序:
https://my.domain/service1/
代理配置基本上是这样的:

ProxyPass /marketsy/ http://internal.service1/
在反向代理连接到的服务器上,我使用以下 apache 规则为我的 Symfony 应用程序提供服务:
<VirtualHost *:80>
ServerName internal.service1
DocumentRoot /webroot/service1/public

<FilesMatch \.php$>
SetHandler proxy:unix:/run/php/php7.2-fpm-ui.sock|fcgi://localhost
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
SetEnv HTTP_X_FORWARDED_PROTO "https"
</FilesMatch>

<Directory /webroot/service1/public>
AllowOverride None
Require all granted
FallbackResource /index.php
</Directory>

<Directory /webroot/service1/public/bundles>
FallbackResource disabled
</Directory>
</VirtualHost>
应用程序本身是可重新访问的,但 Symfony 无法处理“service1”路径前缀。
例如,它尝试访问 https://my.domain/_wdt/8e3926 下的分析器。而不是 https://my.domain/service1/_wdt/8e3926在根路由旁边,所有路由都不起作用:
例如:
当我尝试访问 https://my.domain/service1/my/page我将被重定向到 https://my.domain/my/page
现在我的问题是,当生成 urls 时,如何配置 Symfony 以了解“service1”路径前缀。

最佳答案

正确的做法(示例):
创建 src/Controller/BarController.php

<?php

namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;

class BarController
{
public function index()
{
return new Response('<p>Bar controler response</p>');
}
}
src/Controller/FooController.php
<?php

namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;

class FooController
{
public function index()
{
return new Response('<p>Foo controler response</p>');
}
}
创建 config/routes/prefix-routes.yaml
index:
path: /
controller: App\Controller\DefaultController::index

bar:
path: /bar
controller: App\Controller\BarController::index

foo:
path: /foo
controller: App\Controller\FooController::index

并编辑路由 config/routes.yaml - 删除其内容,然后将:
prefixed:
resource: "routes/prefix-routes.yaml"
prefix: service1
所有 Controller 现在都可以在 urls 上找到:
http://localhost/service1/ for DefaultController.php
http://localhost/service1/bar for BarController.php
http://localhost/service1/foo for FooController.php
如果您希望分析器与 service1 一起使用前缀以及然后编辑 config/routes/dev/web_profiler.yaml这边走:
web_profiler_wdt:
resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml'
prefix: service1/_wdt

web_profiler_profiler:
resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml'
prefix: service1/_profiler
现在它们应该可以在:
http://localhost/service1/_wdt... for wdt
http://localhost/service1/_profiler for profiler
为注解添加前缀:
创建 Controller src/Controller/AnnoController.php :
<?php

namespace App\Controller;

use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;

class AnnoController extends AbstractController
{
/**
* @Route("/anno", name="anno")
*/
public function index()
{
return new Response('<p>Anno controler response</p>');
}
}
编辑 config/routes/annotations.yaml并添加 prefix: service1 :
controllers:
resource: ../../src/Controller/
type: annotation
prefix: service1

kernel:
resource: ../../src/Kernel.php
type: annotation
现在前缀被添加到通过注释完成的路由中:
http://localhost/service1/anno for AnnoController.php
一些引用:
Symfony Routing Prefix
Symfony Routing Configuration Keys
添加前缀 添加前缀的快速而肮脏的解决方法 service1到所有路由(不推荐)。
而不是像上面那样改变路由只是编辑 src/Kernel.php protected function configureRoutes并更改每个 $routes->import行添加 ->prefix('service1')最后看起来是这样的:
protected function configureRoutes(RoutingConfigurator $routes): void
{
$routes->import('../config/{routes}/'.$this->environment.'/*.yaml')->prefix('service1');
$routes->import('../config/{routes}/*.yaml')->prefix('service1');

if (is_file(\dirname(__DIR__).'/config/routes.yaml')) {

$routes->import('../config/{routes}.yaml')->prefix('service1');

} elseif (is_file($path = \dirname(__DIR__).'/config/routes.php')) {
(require $path)($routes->withPath($path), $this);
}
}
所有 Controller 现在都可以在 urls 上找到:
http://localhost/service1/ for DefaultController.php
http://localhost/service1/bar for BarController.php
http://localhost/service1/foo for FooController.php
以及分析器:
http://localhost/service1/_wdt... for wdt
http://localhost/service1/_profiler for profiler

关于php - 在子目录中使用反向代理运行 Symfony 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63520036/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com