我喜欢在提供以下端点的反向代理后面运行 Symfony 5 应用程序:
代理配置基本上是这样的:
ProxyPass /marketsy/ http://internal.service1/
Run Code Online (Sandbox Code Playgroud)
在反向代理连接到的服务器上,我使用以下 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>
Run Code Online (Sandbox Code Playgroud)
应用程序本身是可重新访问的,但 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”路径前缀。
我希望我的命名空间“ App \ Controller \ Api”中的所有Controller操作路由都具有前缀“ / api”。我还想在控制器内部使用注释来设置其余路由。
在Symfony 3中,这是通过编辑'config / routing.yml'完成的:
app:
resource: '@AppBundle/Controller/Api'
type: annotation
prefix: /api
Run Code Online (Sandbox Code Playgroud)
如何在Symfony 4中做到这一点?我需要捆绑吗?由于没有'config / routing.yml',我将使用哪个配置文件?