Маршрутизация Laravel работает только с '/', а не с '/ stuff' - PullRequest
0 голосов
/ 18 марта 2019

Я только начал пытаться выучить Ларавел (5.8).

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

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

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

<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:\WebDev\Projects\album> php artisan route:list
+--------+----------+----------+------+-------------------------------------------+--------------+
| Domain | Method   | URI      | Name | Action                                    | Middleware   |
+--------+----------+----------+------+-------------------------------------------+--------------+
|        | GET|HEAD | /        |      | App\Http\Controllers\DemoController@index | web          |
|        | GET|HEAD | api/user |      | Closure                                   | api,auth:api |
|        | GET|HEAD | demo     |      | App\Http\Controllers\DemoController@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]

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

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

1 Ответ

0 голосов
/ 17 апреля 2019

Для исправления ошибки 404 попробуйте это: https://gist.github.com/iwebroot/544c3b5b7dcf0b8fd96c0dbef8a5d69f

Ваша ошибка:

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

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

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

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...