路由在调试列表中,但在 Symfony 4 中返回 404

Posted

技术标签:

【中文标题】路由在调试列表中,但在 Symfony 4 中返回 404【英文标题】:Route is in debug list but returns 404 in Symfony 4 【发布时间】:2018-07-10 17:13:36 【问题描述】:

好的,所以我刚刚安装了最新版本的 Symfony 4。安装后运行浏览器并显示一个漂亮的欢迎问候语。一切顺利!

然后我使用make:controller 创建了一个新控制器。我将此控制器命名为客户端并使用注释,与其他默认控制器相同。我配置路由如下:

/**
 * @Route("/client", name="client")
 */
public function index()

    // replace this line with your own code!
    return $this->render('@Maker/demoPage.html.twig', [ 'path' => str_replace($this->getParameter('kernel.project_dir').'/', '', __FILE__) ]);

我刷新了浏览器,一切正常,没有错误。

然后我在浏览器中手动输入路径以检查它是否真的有效:

localhost:8000/client

问题。 url 返回标准 apache 404

Not Found
The requested URL /client was not found on this server.

Apache/2.4.18 (Ubuntu) Server at new.staff-fdr.dev Port 80

调试路线看到了这一点:

-------------------------- -------- -------- ------ ------------------
  Name                       Method   Scheme   Host   Path   

 -------------------------- -------- -------- ------ -----------------
  client                     ANY      ANY      ANY    /client  
  index                      ANY      ANY      ANY    /       
  _twig_error_test           ANY      ANY      ANY    /_error/code.

【问题讨论】:

缺少 htaccess。 【参考方案1】:

缺少.htaccess 文件。

composer config extra.symfony.allow-contrib true

composer req symfony/apache-pack

【讨论】:

这解决了我的问题,我只做了 composer req symfony/apache-pack【参考方案2】:

我也遇到了这个问题,如果这不适合你,这里还有一些其他的想法。一种是按照此处记录的方式配置您的 Web 服务器。使用 mod_php 优化的 apache 对我有用:

https://symfony.com/doc/master/setup/web_server_configuration.html

其次,我的网络服务器上没有启用 mod 重写。这最终是让我振作起来的解决方案。运行:

sudo a2enmod 重写

然后

sudo service apache2 重启

这应该会让你继续前进。

【讨论】:

在 2 个不同的项目中遇到了同样的问题,并且不知道原因。这是解决方案,非常感谢!【参考方案3】:

就我而言,我只是在迁移到 symfony flex 时忘记将我的虚拟主机配置从 web 更改为 public 文件夹。

<VirtualHost *:80>
    ServerAdmin webmaster@localhost.com
    DocumentRoot "C:/xampp/htdocs/myproject/web/"
    ServerName dev.myproject.com
    ServerAlias dev.myproject.com
    <Directory "C:/xampp/htdocs/myproject/web/">
        Options Indexes FollowSymLinks Includes ExecCGI
        AllowOverride All
        Require all granted
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@localhost.com
    DocumentRoot "C:/xampp/htdocs/myproject/public/"
    ServerName dev.myproject.com
    ServerAlias dev.myproject.com
    <Directory "C:/xampp/htdocs/myproject/public/">
        Options Indexes FollowSymLinks Includes ExecCGI
        AllowOverride All
        Require all granted
        Order allow,deny
        Allow from all
     </Directory>
</VirtualHost>

【讨论】:

以上是关于路由在调试列表中,但在 Symfony 4 中返回 404的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 从路由中删除前三个字符

如何在 Symfony2 中获取控制器的所有路由列表?

如何在Symfony2中获取控制器的所有路由列表?

如何使用 Symfony Routing 作为独立组件来调试路由?

在 SonataMediaBundle 和 Symfony 4 中查看和下载路由的访问被拒绝

如何在 symfony 2 中获取根路由