Маршруты Laravel не работают?

Я только начал изучать структуру 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 я решил эту проблему со следующими двумя изменениями.

  1. Включите mod_rewrite на сервере apache: sudo a2enmod rewrite .
  2. Измените /etc/apache2/apache2.conf , изменив директиву «AllowOverride» для каталога / var / www (который является моим основным корнем документа): 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. я решил это, раскомментируя строку:

LoadModule rewrite_module libexec / apache2 / mod_rewrite.so

Удалите # из строки httpdf.conf выше. Тогда это сработает. наслаждаться!

Я думаю, что вы удалили файл .htaccess по умолчанию в общей папке laravel. загрузите файл, он должен исправить вашу проблему.