Как я могу исправить Laravel 5.1 – 404 Not Found?

Я пытаюсь использовать Laravel 5.1 в первый раз. Я смог установить его, и https://sub.example.com/laravel/public/ показывает, что нужно. Тем не менее, создаваемые мной представления дают мне 404 Ошибка Страница не найдена.

Вот что я сделал до сих пор:

Я создал контроллер в laravel\app\Http\controllers\Authors.php

Вот код файла Authors.php

 <?php class Authors_Controller extends Base_Controller { public $restful = true; public function get_index() { return View::make('authors.index') ->with('title', 'Authors and Books') ->with('authors', Author::order_by('name')->get()); } } 

Затем я создал представление в laravel\resources\views\Authors\index.blade.php

Вот код файла index.blade.php

 @layout('layouts.default') @section('content') Hello, this is a test @endsection 

Затем я создал макет в laravel\resources\views\layouts\default.blade.php

Вот код файла default.blade.php

 <!DOCTYPE html> <html> <head> <title>{{ $title }}</title> </head> <body> @if(Session::has('message')) <p style="color: green;">{{ Session::get('message') }}</p> @endif @yield('content') Hello - My first test </body> </html> 

Наконец, я создал маршрут в laravel\app\Http\routes.php

 <?php Route::get('/', function () { return view('welcome'); }); Route::get('authors', array('as'=>'authors', 'uses'=>'authors@index')); 

Но по какой-то причине я продолжаю получать страницу ошибок 404, которая не найдена.

Я включил mod_rewrite на моем Apache 2.4.9, раскомментируя строку

 LoadModule rewrite_module modules/mod_rewrite.so 

Затем перезапустили Apache.

Из того, что я могу сказать на php_info() mod_rewrite включен

 Loaded Modules core mod_win32 mpm_winnt http_core mod_so mod_php5 mod_access_compat mod_actions mod_alias mod_allowmethods mod_asis mod_auth_basic mod_authn_core mod_authn_file mod_authz_core mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_dir mod_env mod_include mod_isapi mod_log_config mod_mime mod_negotiation mod_rewrite mod_setenvif mod_socache_shmcb mod_ssl 

Мой текущий файл .htaccess выглядит так: «который является заводским значением по умолчанию»,

Параметры -Многопроцессоры

 RewriteEngine On # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] 

Я также попытался изменить его на приведенный ниже код в соответствии с [документацией 1

 Options +FollowSymLinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] 

Тем не менее, я все еще получаю страницу 404, когда я иду

 https://sub.example.com/laravel/public/authors 

Что я делаю не так? Как я могу исправить эту проблему?

Я вижу то же поведение, что и возможность посещения / маршрута, но все остальные страницы возвращают 404, когда я впервые устанавливаю сайты Laravel.

В конфигурационном файле apache httpd.conf или httpd-vhosts.conf вам нужно включить директивы, которые могут быть помещены в файл .htaccess.

Вот пример моей конфигурации VirtualHost:

 <VirtualHost *:80> ServerAdmin admin@gmail.com DocumentRoot "C:/www/laravel_authority-controller_app/public" ServerName authoritycontroller.www ErrorLog "logs/AuthorityController.www-error.log" CustomLog "logs/AuthorityController.www-access.log" common <Directory "C:/www/laravel_authority-controller_app/public"> # # Possible values for the Options directive are "None", "All", # or any combination of: # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews # # Note that "MultiViews" must be named *explicitly* --- "Options All" # doesn't give it to you. # # The Options directive is both complicated and important. Please see # http://httpd.apache.org/docs/2.4/mod/core.html#options # for more information. # Options Indexes FollowSymLinks Includes ExecCGI # # AllowOverride controls what directives may be placed in .htaccess files. # It can be "All", "None", or any combination of the keywords: # AllowOverride FileInfo AuthConfig Limit # AllowOverride All # # Controls who can get stuff from this server. # Require all granted </Directory> </VirtualHost> 

Ключевая запись для вашей проблемы – AllowOverride All . Этого должно быть достаточно, чтобы заставить сайт работать, но вы также можете включить options и Require all granted если они соответствуют всем веб-сайтам.

если вы на ubuntu, вы делаете 3 вещи. 1. проверьте, что «/ var / www / html / YourProject / public / .htacess» выглядит следующим образом.

 <IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews </IfModule> RewriteEngine On # Redirect Trailing Slashes If Not A Folder... RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)/$ /$1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] # Handle Authorization Header RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

2. Добавьте эти строки в /etc/apache2/sites-available/000-default.conf

 <Directory "/var/www/html"> AllowOverride all Require all granted </Directory> 

Примечание: помните, что это системный файл, поэтому вы должны использовать этот comamd

 sudo gedit /etc/apache2/sites-available/000-default.conf 
  1. по последнему разрешить переписать модуль.

    Модули LoadModule rewrite_module / mod_rewrite.so

или

 sudo a2enmod rewrite 

Если ваши маршруты Laravel не работают, и вы получаете ошибки «Not Found», когда вы пытаетесь загрузить страницу, ваш файл .htaccess, скорее всего, не имеет права выполнять свои обязанности.

Ключ – это директива apache AllowOverride.

Если у вас нет AllowOverride для All, ваш файл Laravel .htaccess ( /public/.htaccess ) не сможет включить mod_rewrite, и ваши маршруты не будут работать.

Первый шаг – открыть файл apache httpd.conf. В OS X он расположен по адресу:

 /private/etc/apache2/httpd.conf 

Вариант 1) Измените свою главную директиву

Это изменит значение AllowOverride для всех ваших веб-сайтов. В файле httpd.conf найдите основную директиву:

 **<Directory "/var/www/html"> ... AllowOverride None ... </Directory>** 

Просто измените его на это:

 **<Directory "/var/www/html"> ... AllowOverride All ... </Directory>** 

Вариант 2) Добавьте директиву в директиву вашего сайта.

 ** <VirtualHost 127.0.0.1:80> DocumentRoot "/var/www/html/epigroove/public" ... <Directory "/var/www/html/epigroove/public"> AllowOverride All </Directory> </VirtualHost> 

**

Сохраните изменения в файле httpd.conf , перезапустите или перезагрузите Apache, и ваши маршруты должны быть запущены.

Если вы используете Apache HTTPD 2.2.15 на Linux (CentOS 6.7 в моем случае), директива каталога будет выглядеть так:

 <Directory /> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All allow from all </Directory> 

Вам, вероятно, не нужна строка «Параметры», если вы не используете эти параметры.

Благодарим вас за ответ 2.4. Это помогло мне решить эту проблему для меня на 2.2, и у меня есть еще один сервер с 2.4, я тоже могу применить его.