Подтвердить что ты не робот

Laravel 5 нуждается в index.php с использованием виртуального хоста Apache

Когда я загружаю страницы, которые не являются root, страница не будет загружаться без index.php перед маршрутом. Ошибка, которую я получаю:

 Not Found

 The requested URL /login was not found on this server.

 Apache/2.4.7 (Ubuntu) Server at mydomain.com Port 80

Для начала у меня есть файл виртуального хоста, содержащий:

//also tried adding DirectoryIndex here before <directory>
<directory /var/www/mydomain.com>
    DirectoryIndex index.php
    AllowOverride ALL
</directory>

и .htacces в моей публике:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

У меня есть другой домен с тем же конфигурацией .htaccess и appache на том же сервере, и он отлично работает. Также я перезапустил apache. Если я использую phpinfo на моей странице index.php/route, я вижу в загруженных модулях:

mod_rewrite mod_setenvif 

При запуске локального сайта с xampp все работает нормально. В течение нескольких часов я пытаюсь сейчас, но я не могу это исправить или найти ошибку (журналы пустые) или любые решения, которые я еще не пробовал.

Edit:

Im, используя Ubuntu Ubuntu 14.04 x64 на цифровом океане VPS. И я попытался включить его снова и снова (как было предложено). Версия PHP 5.5.9-1ubuntu4.9. Я выполнил этот учебник, чтобы настроить все (кроме части directcoty). Я изменил расположение журнала apache, и файл error.log создается в данном каталоге, но ошибок нет.

В настоящее время моя конфигурация appache: this (я проверил тройные белые части, где находится доменное имя).

Когда я запускаю apache2ctl -t D DUMP_VHOSTS, я получаю

enter image description here

это выглядит хорошо для меня, также попытался отключить конфигурацию по умолчанию, но он не помог.

Примечание: я заменил свой реальный домен на mydomain.com, в действительности я использую свой реальный домен на этих местах.

Мысль, как я точно знаю, что редактирование conf файла - это тот, который используется доменом?

4b9b3361

Ответ 1

В итоге я удалил полный файл conf и снова копировал его из того, который работает. Я взял default.htaccess из laravel, и он сработал. К сожалению, я все еще не знаю, что было не так. Текущий файл conf выглядит как

<Directory /var/www/mydomain.com>
    AllowOverride ALL
    DirectoryIndex index.php
</Directory>

My.htaccess in/public

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Ответ 2

Это correct альтернативное правило .htaccess для Laravel 5, предлагаемое использовать, когда по умолчанию не используется работа:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Я полагаю, что Options +FollowSymLinks играет важную роль, потому что DirectotyIndex действует как символическая ссылка.

Также проверьте /app/config/app.php, чтобы убедиться, что вы не установили Config ('app.url'), чтобы содержать index.php.

Если у вас есть laravel, установленный в подкаталоге, см. это: Как удалить "public/index.php" в url-генерации laravel?

Ответ 3

Вы пытались отключить все (выключение), а затем снова включить его?

Если все так, как вы говорите, оно должно работать. Я бы попробовал перезапуск, чтобы узнать, не изменит ли он что-либо.

Если это не так, пожалуйста, уточните, какую ОС вы используете.

Ответ 4

Сегодня у меня была почти такая же проблема, что и @dasper тоже помогли мне. Я использую также цифровой океан Ubuntu 14.04, и мне пришлось запустить команду a2enmod rewrite, а затем перезагрузить apache2. Казалось, что, несмотря на то, что переписать, похоже, было, на самом деле это не так.

Ответ 5

Сначала убедитесь, что mode_rewrite включен. Я уверен, что вы, вероятно, сделали это, но я хочу убедиться, что ничего не пропустили.

Далее, посмотрите, какую версию apache вы используете, так как синтаксис изменился между 2.2 и 2.4. Это не должно быть большой проблемой и очень сомневаюсь, что это преступник, но может спасти вам неприятности в будущем.

Затем попробуйте поместить условие перезаписи внутри информации vhost вместо файла htaccess. Это может помочь немного повысить производительность, а также дать вам предупреждение /err консоли при перезапуске apache, где ошибки htaccess могут быть отключены.

<directory /var/www/mydomain.com>
    Options -MultiViews
    AllowOverride ALL
    RewriteEngine On

    RewriteRule ^(.*)/$ /$1 [L,R=301]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]
</directory>

Помимо этой точки зрения я был бы в затруднении без каких-либо дополнительных протоколов или информации с сервера. Вы также можете добавить CustomLog в vhost и сообщить обо всех запросах, обрабатываемых сервером.

Ответ 6

Проблема может заключаться в конфигурации виртуального хоста и/или неуместном файле .htaccess.

Убедитесь, что ваш файл .htaccess находится в папке общедоступной / и что для параметра DocumentRoot установлено это общедоступное/папка.

А также < Директория Directory > не управляет вашим виртуальным хостом, а скорее управляет самой папкой и как она может (или не может быть) доступна на сервере. Чтобы изменить конфигурацию виртуального хоста, сделайте это внутри VirtualHost > .

Ниже приведен пример конфигурации виртуального хоста:

<VirtualHost *:80>
    ServerName mydomain.com
    ServerAlias www.mydomain.com
    DocumentRoot "/var/www/mydomain.com/public"
    DirectoryIndex index.php
</VirtualHost>

Вот конфигурация Laravel Apache по умолчанию:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

и вот альтернатива:

Options +FollowSymLinks
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Ответ 7

Попробуйте переименовать server.php в корневой папке Laravel на index.php и скопируйте файл .htaccess из/общедоступной папки в корневую папку Laravel.

Решение найдено здесь

Ответ 8

Я считаю, что ваш путь к каталогу неверен. Вам нужно /public в конце, потому что Laravel рассматривает этот каталог как веб-корень. Попробуйте следующее:

<directory /var/www/mydomain.com/public>
    DirectoryIndex index.php
    AllowOverride ALL
</directory>

Но лучшим решением является размещение содержимого файла .htaccess в вашем виртуальном хосте. Вот так:

<VirtualHost *:80>
    DocumentRoot "/var/www/mydomain.com/public"
    ServerName mydomain.com
    ServerAlias *.mydomain.com

    <Directory "/var/www/mydomain.com/public">
        # Ignore the .htaccess file in this directory
        AllowOverride None

        # Make pretty URLs
        <IfModule mod_rewrite.c>
            <IfModule mod_negotiation.c>
                Options -MultiViews
            </IfModule>

            RewriteEngine On

            # Redirect Trailing Slashes...
            RewriteRule ^(.*)/$ /$1 [L,R=301]

            # Handle Front Controller...
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^ index.php [L]
        </IfModule>
    </Directory>
</VirtualHost>

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

apache2ctl -t -D DUMP_VHOSTS

Это приведет к распечатке списка всех загруженных vhosts. Если ваш нет в этом списке, убедитесь, что он включен, запустив:

a2ensite [name_of_your_config_file]

Затем перезапустите apache с помощью:

service apache2 reload

Ответ 9

Еще одно примечание: не забудьте отредактировать /etc/hosts и добавить 127.0.0.2 yourdomain.com