我的 Symfony 路由抛出 404?
My Symfony routes are throwing a 404?
我正在尝试重新开始开发,尝试在与 GoDaddy 共享的托管服务器上设置 Symfony。
我正在使用 Symfony 4 完成教程(此处:http://symfony.com/doc/current/page_creation.html)但是 URL.co.uk/lucky/number
抛出 404。
我将完全相同的 URL 路由设置为 /(而不是 lucky/number)并且它工作正常。
routes.yaml
和注释都会出现此问题。
<?php
namespace App\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
class ArticleController
{
/**
* @Route("/")
*/
public function homepage()
{
return new Response('OMG! My new first page already! ');
}
/**
* @Route("/news")
*/
public function news()
{
return new Response('This must be news?');
}
}
例如,上面的内容在 / 上运行良好,但在 /news 上我有一个 404 错误。
这可能是 .htaccess
的问题吗?我的根里没有。
事实证明,使用上面的代码,URL.co.uk/index.php/news
工作得很好。显然我不想要这个,但我希望它能帮助我们追根究底...
首先安装 composer require annotations
:
那么你正在使用其他class Route
:
改变
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
至:
use Symfony\Component\Routing\Annotation\Route;
最后检查你的路线:
php bin/console debug:router
symfony 4 在 public 文件夹中不再有 .htaccess 文件。所以没有重写规则。您必须按照文档中的说明配置虚拟主机:https://symfony.com/doc/master/setup/web_server_configuration.html
如果您无权访问 vhost 文件,您仍然可以在 .htaccess 文件中配置它
有我的虚拟主机文件的摘录:
DocumentRoot /var/www/html/public/
<Directory /var/www/html/public/>
Options FollowSymlinks
AllowOverride None
Order Allow,Deny
Allow from All
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
</IfModule>
</Directory>
使用与此相同的代码将 .htaccess 安装到根目录中 link:
https://github.com/symfony/recipes-contrib/blob/master/symfony/apache-pack/1.0/public/.htaccess
谢谢。
你(像我一样)缺少 symfony 的 .htaccess
用这个衬垫解决了:
composer require symfony/apache-pack
我正在尝试重新开始开发,尝试在与 GoDaddy 共享的托管服务器上设置 Symfony。
我正在使用 Symfony 4 完成教程(此处:http://symfony.com/doc/current/page_creation.html)但是 URL.co.uk/lucky/number
抛出 404。
我将完全相同的 URL 路由设置为 /(而不是 lucky/number)并且它工作正常。
routes.yaml
和注释都会出现此问题。
<?php
namespace App\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
class ArticleController
{
/**
* @Route("/")
*/
public function homepage()
{
return new Response('OMG! My new first page already! ');
}
/**
* @Route("/news")
*/
public function news()
{
return new Response('This must be news?');
}
}
例如,上面的内容在 / 上运行良好,但在 /news 上我有一个 404 错误。
这可能是 .htaccess
的问题吗?我的根里没有。
事实证明,使用上面的代码,URL.co.uk/index.php/news
工作得很好。显然我不想要这个,但我希望它能帮助我们追根究底...
首先安装 composer require annotations
:
那么你正在使用其他class Route
:
改变
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
至:
use Symfony\Component\Routing\Annotation\Route;
最后检查你的路线:
php bin/console debug:router
symfony 4 在 public 文件夹中不再有 .htaccess 文件。所以没有重写规则。您必须按照文档中的说明配置虚拟主机:https://symfony.com/doc/master/setup/web_server_configuration.html
如果您无权访问 vhost 文件,您仍然可以在 .htaccess 文件中配置它
有我的虚拟主机文件的摘录:
DocumentRoot /var/www/html/public/
<Directory /var/www/html/public/>
Options FollowSymlinks
AllowOverride None
Order Allow,Deny
Allow from All
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
</IfModule>
</Directory>
使用与此相同的代码将 .htaccess 安装到根目录中 link:
https://github.com/symfony/recipes-contrib/blob/master/symfony/apache-pack/1.0/public/.htaccess
谢谢。
你(像我一样)缺少 symfony 的 .htaccess
用这个衬垫解决了:
composer require symfony/apache-pack