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:
(я проверил тройные белые части, где находится доменное имя).
Когда я запускаю apache2ctl -t D DUMP_VHOSTS, я получаю
![enter image description here]()
это выглядит хорошо для меня, также попытался отключить конфигурацию по умолчанию, но он не помог.
Примечание: я заменил свой реальный домен на mydomain.com, в действительности я использую свой реальный домен на этих местах.
Мысль, как я точно знаю, что редактирование conf файла - это тот, который используется доменом?
Ответы
Ответ 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