2015-07-15 42 views
10

Jestem nowy w laravel. Używam Ubuntu 15.04. Zainstalowałem Laravel Framework w wersji 5.1.7 (LTS) przy użyciu kompozytu i serwera lamp przy użyciu polecenia $ sudo apt-get install lamp-server^ (nie instalowałem Homestead). Używam PhpStorm 8.0.3 jako IDE.laravel 5 działa tylko z korzeniami root

Stworzyłem trzy trasy i kontroler. Plik PagesController.php wygląda następująco:

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!'; 
    } 
} 

i routes.php wygląda następująco:

Route::get('/', '[email protected]'); 

Route::get('about', '[email protected]'); 

Route::get('hello', '[email protected]'); 

Ilekroć idę do http://localhost:63342/my-first-app/public/ (lub http://localhost:63342/my-first-app/public/index.php) działa dobrze i pokazuje mi się komunikat Welcome to my homepage!. Ale kiedy idę do http://localhost:63342/my-first-app/public/hello lub http://localhost:63342/my-first-app/public/about, otrzymuję wiadomość 404 Not Found.

Ponadto plik .htaccess który znajduje się na my-first-app/public wygląda następująco:

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

Co próbowałem:

  • Próbowałem http://localhost:63342/my-first-app/public/index.php/hello lub http://localhost:63342/my-first-app/public/index.php/about ale to nie działa albo.
  • Wprowadziłem polecenie sudo a2enmod rewrite, po którym następuje, ale to też nie działa.
  • Próbowałem composer dump-autoload, ale to też nie działa.
  • Zmieniłem AllowOverride z None na All w apache2.conf. Teraz część wygląda tak:

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

    , ale to także nie rozwiązuje problemu.

Aktualizacja (15.07.2015):

Wynikiem działania php artisan route:list wygląda następująco:

+--------+----------+-------+------+--------------------------------------------+------------+ 
| Domain | Method | URI | Name | Action          | Middleware | 
+--------+----------+-------+------+--------------------------------------------+------------+ 
|  | GET|HEAD |/ |  | App\Http\Controllers\[email protected] |   | 
|  | GET|HEAD | about |  | App\Http\Controllers\[email protected] |   | 
|  | GET|HEAD | hello |  | App\Http\Controllers\[email protected] |   | 
+--------+----------+-------+------+--------------------------------------------+------------+ 
+0

Uruchom "php rzemieślnik trasy: lista" i wklej wynik. Powinieneś tam zobaczyć wszystkie zdefiniowane trasy. –

+0

@ jedrzej.kurylo Dzięki za odpowiedź. Dodałem wynik na końcu mojego pytania. – today

+0

Czy możesz dodać dd ("test"); w górnej części pliku indeksu, przejdź do "http: // localhost: 63342/my-first-app/public/index.php/about" i sprawdź, czy test zostanie wydrukowany? w ten sposób dowiedzielibyśmy się, czy to coś z przepisywaniem, czy z kodem Laravel: –

Odpowiedz

2

Zmiana pliku .htaccess będzie działać w tym scenariuszu za laravel 5 oficjalny dokument jak poniżej:

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

Byłem posiadanie tego irytującego problemu przez długi czas. Wypróbuj poniższy kod w pliku .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>