#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">
Спасибо.