laravel 5只有root route工作

时间:2015-07-15 15:53:26

标签: php controller routes laravel-5

我是laravel的新手。我正在使用Ubuntu 15.04。我使用composer和使用$ sudo apt-get install lamp-server^命令的灯服务器安装了Laravel Framework版本5.1.7(LTS)(我没有安装Homestead)。我使用PhpStorm 8.0.3作为IDE。

我创建了三条路线和一个控制器。 PagesController.php文件如下所示:

class PagesController extends Controller
{
    public function index()
    {
        return 'Welcome to my homepage!';
    }

    public function about()
    {
        return 'Learn a little about me.';
    }

    public function hello()
    {
        return 'Hello World!';
    }
}

并且routes.php看起来像这样:

Route::get('/', 'PagesController@index');

Route::get('about', 'PagesController@about');

Route::get('hello', 'PagesController@hello');

每当我转到http://localhost:63342/my-first-app/public/(或http://localhost:63342/my-first-app/public/index.php)时,它都能正常工作并向我显示Welcome to my homepage!消息。但每当我转到http://localhost:63342/my-first-app/public/hellohttp://localhost:63342/my-first-app/public/about时,我得到的是404 Not Found消息。

此外,位于.htaccess的{​​{1}}文件如下所示:

my-first-app/public

我尝试过:

  • 我尝试了<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews </IfModule> RewriteEngine On # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule> http://localhost:63342/my-first-app/public/index.php/hello,但它也无效。
  • 我输入了命令http://localhost:63342/my-first-app/public/index.php/about,后跟sudo a2enmod rewrite,但它也无效。
  • 我尝试了sudo service apache2 restart,但它也无效。
  • 我在composer dump-autoload中将AllowOverrideNone更改为All。现在它的一部分看起来像这样:

    apache2.conf

    但它也没有解决问题。

更新(2015年7月15日):

运行<Directory /> Options FollowSymLinks AllowOverride All Require all denied </Directory> <Directory /usr/share> AllowOverride All Require all granted </Directory> <Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> <Directory /srv/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> 的结果如下所示:

php artisan route:list

5 个答案:

答案 0 :(得分:4)

我一直有这个烦人的问题很长一段时间。在公共文件夹中打开.htaccess文件并替换以下代码,备份原始代码以防万一。

<IfModule mod_rewrite.c>

    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
    RewriteRule ^(.*) - [E=BASE:%1]

    RewriteCond %{ENV:REDIRECT_STATUS} ^$
    RewriteRule ^index\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule .? - [L]

    RewriteRule .? %{ENV:BASE}/index.php [L]

</IfModule>

答案 1 :(得分:3)

启用apache2重写模块:

sudo a2enmod rewrite

然后重新启动apache2服务器:

sudo service apache2 restart

并确保AllowOverride All到您的apache2配置文件。

答案 2 :(得分:2)

在每个laravel 5官方文档中,更改.htaccess文件将在此方案中起作用,如下所示:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

答案 3 :(得分:1)

第1步:启用mod_rewrite

  

sudo a2enmod重写

第2步:要激活这些更改,请重新启动Apache2

  

sudo服务apache2重新启动

现在检查您的网页是否正常工作。 如果没有,请执行步骤3。

第3步:编辑Apache配置文件

要编辑,请运行以下命令:

  

sudo nano /etc/apache2/sites-available/000-default.conf

然后在<VirtualHost *:80>下添加以下代码块

<Directory /var/www/html>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Require all granted
</Directory>

保存文件并退出。

重新启动apache2:

  

sudo服务apache2重新启动

现在应该可以正常工作了。

答案 4 :(得分:1)

大多数情况下,初学者不会在其项目中创建.htaccess文件,请确保从公用文件夹中复制.htaccess文件并将其粘贴到您项目的根目录中...