Symfony 4 可以配置为忽略安装在子目录中的代码吗?

Can Symfony 4 be configured to ignore code installed in subdirectories?

我目前正在将旧网站转换为使用 Symfony 4,并且该网站使用 LiveZilla 实时聊天应用程序。

LiveZilla 位于站点的子文件夹中,可以使用 somesite.com/livezilla 下的 URL 直接访问。我目前当然不能访问它,因为我还没有为这个文件夹配置路由。所以 Symfony 决定这将是一个 404。

LiveZilla 本质上是一个完全独立的应用程序,位于其自己的文件夹中。它不依赖于托管它的网站。有没有办法告诉 Symfony 忽略某些路径,以便可以不受干扰地执行这样的代码?

我有一种潜移默化的感觉,我需要调整我看待这个问题的方式,因为我在 Symfony 文档中找不到任何关于这个的明显信息,而且这个框架是经过深思熟虑的。到目前为止我想出的最好的方法是破解 public/.htaccess,但不知何故感觉不对...

您的 .htaccess 文件应该允许直接请求现有文件,但不允许目录。看到这条规则:

# If the requested filename exists, simply serve it.
# We only want to let Apache serve files and not directories.
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

这意味着您应该能够访问 somesite.com/livezilla/index.php 但请求 somesite.com/livezilla 将重定向到 symfony 前端控制器。因此,请尝试更改您的链接以指向子目录中的实际文件。

编辑 .htaccess 文件以满足您的需要也没有错。您只需要一个条件来检查请求是否针对子目录,如果是,则使用与上面相同的 RewriteRule ^ - [L] 以允许该请求继续。

如果放在上述规则 (reference) 之后,以下内容应该有效:

RewriteCond %{REQUEST_URI} ^/livezilla/ 
RewriteRule ^ - [L]

或者这可能更好,将此规则紧跟在 RewriteEngine On(reference)

行之后
RewriteRule ^(livezilla) - [L]

[L] 标志意味着规则将是最后一个 用于请求的规则。