Маршрутизация Laravel работает только с ‘/’, а не с ‘/stuff’

#php #laravel-5 #routing

#php #laravel-5 #маршруты

Вопрос:

Я только начал пытаться изучить Laravel (5.8).

Я использую XAMPP для локальной разработки в Windows.

Я следовал онлайн-примеру, который интегрирует Bootstrap 4 с Laravel, используя тему альбома.

Проект называется Album и находится за пределами XAMPP; поэтому я установил виртуальный хостинг:

 <VirtualHost *:80>
   ServerName album.dev
   DocumentRoot Z:/WebDev/Projects/Album/public
   <Directory " Z:/WebDev/Projects/Album">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
   </Directory>
</VirtualHost> 
  

Если я вызываю album.dev в браузере, он работает нормально, я получаю ожидаемую домашнюю страницу.

Однако, когда, согласно инструкциям примера, я пытаюсь запустить с помощью: album.dev/demo, я получаю ошибку 404.

Это то, что мой web.php выглядит так, как сейчас:

 Route::get('/', function () {
 // return view('welcome');
    return view('demo');
});

// does not work:
Route::get('/demo', function () {
    return view('demo');
}); 
  

Я также пробовал использовать контроллер для обоих путей:

 Route::get('/', 'DemoController@index');
Route::get('/demo', 'DemoController@index');
  

с тем же результатом: для запуска страницы работает только ‘/’.
Но это интересно:

 PS Z:WebDevProjectsalbum> php artisan route:list
 -------- ---------- ---------- ------ ------------------------------------------- -------------- 
| Domain | Method   | URI      | Name | Action                                    | Middleware   |
 -------- ---------- ---------- ------ ------------------------------------------- -------------- 
|        | GET|HEAD | /        |      | AppHttpControllersDemoController@index | web          |
|        | GET|HEAD | api/user |      | Closure                                   | api,auth:api |
|        | GET|HEAD | demo     |      | AppHttpControllersDemoController@index | web          |
 -------- ---------- ---------- ------ ------------------------------------------- -------------- 
  

Согласно вышесказанному, действие для ‘/’ и для ‘demo’ одинаковое.

Это мой .htaccess:

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

RewriteEngine On

# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (. )/$
RewriteRule ^ %1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
  

Очевидно, я не понял чего-то фундаментального в Laravel.

(Пожалуйста, не стесняйтесь изменять заголовок этого вопроса по мере необходимости)

Комментарии:

1. Включена ли у вас перезапись модов?

2. Да (я так думаю), я разместил .htaccess

3. Вы пробовали это? Route::get('/demo', function () { return view('demo'); });

4. @entoniperez: да, это то, что я пытался, я отредактировал вопрос, спасибо.

5. Есть ли у вашего .htaccess эта строка RewriteEngine on ?

Ответ №1:

Чтобы исправить ошибку 404, попробуйте это: https://gist.github.com/iwebroot/544c3b5b7dcf0b8fd96c0dbef8a5d69f

Ваша ошибка :

 <Directory "Z:/WebDev/Projects/Album">
  

Правильный Каталог :

 <Directory "Z:/WebDev/Projects/Album/public">
  

Спасибо.