laravel 5只有root route工作

tod*_*day 13 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!';
    }
}
Run Code Online (Sandbox Code Playgroud)

routes.php看起来像这样:

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

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

Route::get('hello', 'PagesController@hello');
Run Code Online (Sandbox Code Playgroud)

每当我去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/hello或者http://localhost:63342/my-first-app/public/about,我得到的是404 Not Found消息.

此外,.htaccess位于此处的文件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>
Run Code Online (Sandbox Code Playgroud)

我尝试过的:

  • 我想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但它也不起作用.
  • 我改变AllowOverrideNoneAllapache2.conf.现在它的一部分看起来像这样:

    <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>
    
    Run Code Online (Sandbox Code Playgroud)

    但它也没有解决问题.

更新(2015年7月15日):

运行的结果php artisan route:list如下所示:

+--------+----------+-------+------+--------------------------------------------+------------+
| Domain | Method   | URI   | Name | Action                                     | Middleware |
+--------+----------+-------+------+--------------------------------------------+------------+
|        | GET|HEAD | /     |      | App\Http\Controllers\PagesController@index |            |
|        | GET|HEAD | about |      | App\Http\Controllers\PagesController@about |            |
|        | GET|HEAD | hello |      | App\Http\Controllers\PagesController@hello |            |
+--------+----------+-------+------+--------------------------------------------+------------+
Run Code Online (Sandbox Code Playgroud)

Din*_*Sah 7

第 1 步:启用 mod_rewrite

须藤 a2enmod 重写

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

须藤服务 apache2 重启

现在检查您的网页是否正常工作。如果没有,请按照第 3 步操作。

第 3 步:编辑 Apache 配置文件

要编辑运行以下命令:

须藤纳米/etc/apache2/sites-available/000-default.conf

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

<Directory /var/www/html>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

保存文件并退出。

重启apache2:

须藤服务 apache2 重启

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


小智 5

我一直很烦恼这个问题。打开.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>
Run Code Online (Sandbox Code Playgroud)


San*_*ega 5

启用apache2重写模块:

sudo a2enmod rewrite
Run Code Online (Sandbox Code Playgroud)

然后重新启动apache2服务器:

sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

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


小智 2

根据 laravel 5 官方文档,在这种情况下更改 .htaccess 文件将起作用,如下所示:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
Run Code Online (Sandbox Code Playgroud)