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


Я только начал изучать структуру Laravel и у меня возникли проблемы с маршрутизацией.

единственный маршрут, который работает, - это домашний маршрут по умолчанию, который прикреплен к Laravel из коробки.

Я использую WAMP в Windows, и он использует PHP 5.4.3 и Apache 2.2.22, а также у меня включен mod_rewrite и удален индекс.php ' из приложения.php файле конфигурации оставить пустую строку.

Я создал новый контроллер пользователей:

class User_Controller extends Base_Controller {

    public $restful = true;

    public function get_index() 
    {
        return View::make('user.index');
    }
}

Я создал файл представления в application/views/ user / called .php С некоторым базовым html-кодом и в маршрутах.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 не найдена ошибка. Почему это происходит?

15 58

15 ответов:

вы пробовали добавить это в файл маршрутов вместо Route::get('user', "user@index")?

кусок текста перед @,user в этом случае будет направлять страницу на пользовательский контроллер и кусок текста после @,index, направить скрипт user функции public function get_index().

я вижу, вы используете $restful в этом случае вы можете установить свой Route до Route::any('user', 'user@index'). Это будет обрабатывать оба POST и GET, вместо того, чтобы писать их обоих отдельно.

на моей установке Ubuntu LAMP я решил эту проблему со следующими 2 изменениями.

  1. включить mod_rewrite на сервере apache:sudo a2enmod rewrite.
  2. Edit / etc/apache2 / apache2.conf, изменение директивы "AllowOverride" для каталога /var/www (который является моим основным корнем документа):AllowOverride All

затем перезапустите сервер Apache:service apache2 restart

с помощью WAMP нажмите на значок wamp- > apache - > модули apache - >прокрутите и проверьте rewrite_module Перезапуск LoadModule rewrite_module

Примечание, серверное приложение автоматически перезапускается для вас, как только вы включите "rewrite_module"

вы пытались проверить, если

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>

вы можете попробовать двигаться root/public/.htaccess до root/.htaccess и это должно работать

маршруты

используйте их для определения конкретных маршрутов, которые не управляются контроллерами.

контроллеры

используйте их, когда вы хотите использовать традиционную архитектуру MVC

решение проблемы

вы не регистрируете контроллеры в качестве маршрутов, если вы не хотите конкретный "именованный" маршрут для действия контроллера.

вместо того, чтобы создавать маршрут для ваших действий контроллеров, просто зарегистрируйте свой контроллер:

Route::controller('user');

теперь ваш контроллер зарегистрирован, вы можете перейти к http://localhost/mysite/public/user и свой get_index будет работать.

вы также можете зарегистрировать все контроллеры за один раз:

Route::controller(Controller::detect());

не забываем "RewriteBase" в public/.htaccess:

например :

Options +FollowSymLinks
RewriteEngine On
RewriteBase /your/folder/public

хорошо, так что после удара головой по этой проблеме чуть больше дня... Я встал и сделал то, что должен был сделать вчера, и отладил то, что происходило!

что Laravel пытается сделать здесь, это вставить файл index.php прямо перед путем, заданным в качестве маршрута. Так, например, если вы указали Route::get('/account/create', ..., и выполнить ваше приложение от say 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 предоставляет правильное правило перезаписи в удобном .htaccess файл прямо там, в вашем приложении public папка. Проблема в том, что код в этом '.файл htaccess не будет работать с тем, как WAMP настроен из коробки. Причиной этого, по-видимому, является проблема, предложенная muvera в верхней части этого потока -- код rewrite_module должен быть загружен Apache перед RewriteRule материал будет работать. Черт возьми, это имеет смысл.

часть, которая не имеет смысла: просто stopping и restarting службы Apache не будут подбирать изменения, необходимые для WAMP, чтобы сделать правильную вещь с вашим RewriteRule-я знаю, я пробовал это много раз!

что работает: внесите изменения, предложенные muvera (см. Верхнюю часть потока) для загрузки правильные модули. Затем сбросьте весь сеанс Windows, таким образом, сбрасывая Apache из памяти в целом. Перезагрузите (перезагрузите) WAMP, и вуаля! исправление работает, применяется правильный рерайтер, яда, яда; я живу долго и счастливо.

хорошая новость из всего этого: я знаю намного больше о .htaccess,RewriteRule и httpd.conf файлы. Существует хороший (производительность) аргумент для перемещения логики из вашего приложения public.htaccess файл, и положить его в из ваш файл httpd.conf в папке Apache ' bin ' кстати (особенно если у вас есть доступ к этой папке).

попробуйте включить короткие теги php в вашем php.Ини. ПУВР имеет их, как правило, и что 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');
  }
  }

и в стороны.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.конф. Тогда это будет работать. наслаждайтесь!

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