Я только начал изучать структуру Laravel, и у меня проблема с маршрутизацией.
Единственный маршрут, который работает, – это домашний маршрут по умолчанию, который прилагается к Laravel из коробки.
Я использую WAMP в Windows, и он использует PHP 5.4.3 и Apache 2.2.22, а также включен mod_rewrite и удалил 'index.php' из конфигурационного файла application.php, чтобы оставить пустую строку.
Я создал новый контроллер под названием User :
class User_Controller extends Base_Controller { public $restful = true; public function get_index() { return View::make('user.index'); } }
Я создал файл вида в приложении / views / user / called index.php с некоторым базовым html-кодом, а в routes.php я добавил следующее:
Route::get('/', function() { return View::make('home.index'); }); Route::get('user', function() { return View::make('user.index'); });
Первый маршрут работает отлично при посещении корня ( http://localhost/mysite/public
) в моем веб-браузере, но когда я пытаюсь перейти на свой второй маршрут с http://localhost/mysite/public/user
я получаю ошибка 404 не найдена. Почему это происходит?
Вы пытались добавить это в свой файл маршрутов вместо Route::get('user', "user@index")
?
Кусок текста перед пользователем @
в этом случае направит страницу на пользовательский контроллер, а фрагмент текста после index
@
, направит скрипт к public function get_index()
.
Я вижу, что вы используете $restful
, и в этом случае вы можете настроить Route
на Route::any('user', 'user@index')
. Это будет обрабатывать как POST
и GET
, вместо того, чтобы писать их оба отдельно.
Используя WAMP, щелкните значок wamp -> apache-> apache modules-> прокрутите и проверьте rewrite_module. Перезапустите LoadModule rewrite_module.
Обратите внимание: серверное приложение автоматически запускается для вас после включения «rewrite_module»,
На моей установке Ubuntu LAMP я решил эту проблему со следующими двумя изменениями.
sudo a2enmod rewrite
. AllowOverride All
Затем перезапустите сервер Apache: service apache2 restart
Вы пытались проверить, если
http://localhost/mysite/public/index.php/user
работал? Если это так, убедитесь, что все папки вашего пути не имеют заглавных букв. У меня была такая же ситуация, и мне помогали конвертировать письма в нижний регистр.
У меня была проблема с EasyPHP. Обнаружил, что мне нужно было указать AllowOverride All
в моем блоке <Directory>
в httpd.conf
. Без этого Apache иногда игнорирует ваш .htaccess
.
Моя очередь выглядела так …
<Directory "D:/Dev"> Options FollowSymLinks Indexes #### NEXT IS THE CRUCIAL LINE #### AllowOverride All Order deny,allow Allow from 127.0.0.1 Deny from all Require all granted </Directory>
Маршруты
Используйте их для определения определенных маршрутов, которые не управляются контроллерами.
Контроллеры
Используйте их, если хотите использовать традиционную архитектуру MVC
Решение вашей проблемы
Вы не регистрируете контроллеры в качестве маршрутов, если не хотите использовать определенный маршрут с именем «ИМЯ» для действия контроллера.
Вместо того, чтобы создавать маршрут для действий ваших контроллеров, просто зарегистрируйте свой контроллер:
Route::controller('user');
Теперь ваш контроллер зарегистрирован, вы можете перейти к http://localhost/mysite/public/user
и ваш get_index
будет запущен.
Вы также можете зарегистрировать все контроллеры за один раз:
Route::controller(Controller::detect());
Вы можете попытаться переместить root/public/.htaccess
в root/.htaccess
и он должен работать
Не забудьте « RewriteBase
» в вашем public/.htaccess
:
Например :
Options +FollowSymLinks RewriteEngine On RewriteBase /your/folder/public
Хорошо, так что после того, как я чуть-чуть судорожно ломал голову над этой проблемой … Я встал и сделал то, что я ДОЛЖЕН сделать вчера, и ЗАБЫЛ, что происходит!
Что Laravel TRYING делает здесь, вставляет файл index.php
прямо перед дорогой, указанным в качестве маршрута. SO, например, если вы указали Route::get('/account/create', ...,
и выполните свое приложение с localhost/laravel/authenticate/public/account/create
в своем браузере, тогда laravel хочет выполнить localhost/authenticate/public/index.php/account/create
, но для этого …. Apache должен видеть эти запросы через /wamp/www/laravel/laravel/authentication/public
(ваш путь может несколько меняться, в зависимости от где ваше приложение laravel фактически установлено, но трейлинг- public
– это место, где должна выполняться замена) должен быть применен «RewriteRule».
К счастью, laravel поставляет правильное правило Rewrite в удобный файл .htaccess
прямо в общей папке вашего приложения. ПРОБЛЕМА, код в этом файле .htaccess не будет работать с тем, как WAMP настроен из коробки. Причиной этого SEEMS является проблема, предложенная muvera в верхней части этого потока – код rewrite_module должен быть загружен Apache до того, как материал RewriteRule
будет работать. Черт, это имеет смысл.
Часть, которая НЕ имеет смысла: просто stopping
и restarting
службы Apache не подберут изменения, необходимые для WAMP, чтобы делать правильные вещи с помощью RewriteRule – я знаю, я пробовал это много раз!
Что работает: внесите изменения, предложенные muvera (см. Top of thread), чтобы загрузить правильные модули. Затем перезагрузите весь сеанс Windows, тем самым полностью выгрузив Apache из памяти. Перезапустите (перезагрузите) WAMP и VOILA! исправление работает, применяется правильный RewriteRule, yada, yada; Я живу долго и счастливо.
Хорошая новость из всего этого: я знаю больше о файлах .htaccess
, RewriteRule
и httpd.conf
. Существует хороший (эффективный) аргумент для перемещения логики из public
файла .htaccess
вашего приложения и размещения его в разделе Directory ...
вашего httpd.conf в папке «bin» Apache BTW (особенно если у вас есть доступ к эта папка).
Попробуйте включить короткие php-теги в php.ini. WAMP их обычно отключает, и laravel нуждается в них.
Route::get('/', function() { return View::make('home.index'); }); Route::get('user', function() { return View::make('user.index'); });
изменить выше
Route::get('user', function() { return View::make('user.index'); }); Route::get('/', function() { return View::make('home.index'); });
Вы должны использовать '/' (home / default) в конце ваших маршрутов
вы должны использовать команду Laravel 5
class User_Controller extends Controller { public $restful = true; public function get_index(){ return View('user.index'); } }
и в routes.php
Route::get('/', function() { return view('home.index'); }); Route::get('user', function() { return view('user.index'); });
Изменения команды Laravel 5 для просмотра и контроллера см. В документации, в которой у меня была такая же ошибка перед
Просто запустите в своем терминале.
composer dump-autoload
Основная проблема маршрута не работает, так это модуль mod_rewrite.so в macos, linux не включен в файле httpd.conf конфигурации apache, поэтому может работать .htaccess. я решил это, раскомментируя строку:
Удалите # из строки httpdf.conf выше. Тогда это сработает. наслаждаться!
Я думаю, что вы удалили файл .htaccess по умолчанию в общей папке laravel. загрузите файл, он должен исправить вашу проблему.