簡體   English   中英

laravel 5 只有根路由有效

[英]laravel 5 only root route works

我是 laravel 的新手。我正在使用 Ubuntu 15.04。 我使用 composer 安裝了 Laravel 框架版本 5.1.7 (LTS),並使用$ sudo apt-get install lamp-server^命令安裝了燈服務器(我沒有安裝 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');

每當我 go 到http://localhost:63342/my-first-app/public/ (或http://localhost:63342/my-first-app/public/index.php )它工作正常並向我顯示Welcome to my homepage! 信息。 但是每當我 go 到http://localhost:63342/my-first-app/public/hellohttp://localhost:63342/my-first-app/public/about時,我得到的是404 Not Found消息。

此外,位於my-first-app/public.htaccess文件如下所示:

<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/hellohttp://localhost:63342/my-first-app/public/index.php/about但它沒有要么工作。
  • 我輸入了命令sudo a2enmod rewrite然后是sudo service apache2 restart但它也不起作用。
  • 我嘗試了composer dump-autoload但它也不起作用。
  • 我在None中將AllowOverride apache2.conf更改為All 現在它的一部分看起來像這樣:

     <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>

    但它也沒有解決問題。

更新(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 |            |
+--------+----------+-------+------+--------------------------------------------+------------+

啟用 apache2 重寫模塊:

sudo a2enmod rewrite

然后重啟apache2服務器:

sudo service apache2 restart

並確保AllowOverride All到您的 apache2 配置文件。

我被這個煩人的問題困擾了很長時間。 在公共文件夾中打開.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 步:啟用 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>

保存文件並退出。

重啟apache2:

須藤服務 apache2 重啟

現在應該可以正常工作了。

根據 laravel 5 官方文檔,更改 .htaccess 文件將在這種情況下工作,如下所示:

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

大多數時候初學者不會在他們的項目中創建.htaccess文件,請確保從公共文件夾中復制.htaccess文件並將其粘貼到項目的根目錄...

對於 Debian 11, Laravel 版本:8.83.10

我有類似的問題。

pico /etc/apache2/apache2.conf

然后更改以下塊解決了問題

<Directory /usr/share>  
  AllowOverride All
  Require all granted
</Directory>

把 / 放在起點,路線的終點並不重要

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM