Я пытаюсь использовать 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
по последнему разрешить переписать модуль.
Модули 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, я тоже могу применить его.