it-swarm.com.ru

Как я могу исправить 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'=>'[email protected]'));

Но по какой-то причине я продолжаю получать сообщение об ошибке 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 выглядит так: «Это заводская настройка по умолчанию»

Опции -MultiViews

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

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

5
Mike A

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

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

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

<VirtualHost *:80>
    ServerAdmin [email protected]
    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, если они одинаковы для всего веб-сайта.

12
BalmainRob

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

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

Если для AllowOverride не установлено значение All, ваш файл .htaccess Laravel (/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, и ваши маршруты должны быть запущены.

2
smartankur4u

если вы на 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 modules/mod_rewrite.so

или же

Sudo a2enmod rewrite
2
Yosved Villar

Если вы используете 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, к которому я тоже могу применить его.

0
Carlos

кроме того, URL является чувствительным к регистру к имени папки

имя папки: camelCase тогда URL должен быть localhost/camelCase/route-1

надеюсь, это поможет кому-то xD, немного глупо 

0
david valentino