Apache дает 403 Запрещенные ошибки
Ok, поэтому я ранее настроил два виртуальных хоста, и они работают круто. они оба дома простые веб-проекты и отлично работают с http://project1
и http://project2
в браузере.
В любом случае, я пришел добавить еще один vhost. Я отредактировал файл/etc / hosts с помощью 127.0.0.1 project3, а также обновил httpd-vhosts.conf файл путем копирования и вставки предыдущих записей для project2 и редактирования пути к файлу.
Я проверил все права доступа к файлам и папкам (на самом деле я скопировано и вставлено из project2) и просто поместите сообщение "hello world" в индекс.PHP-файл.
Я получаю 403 запрещено доступ запрещен сообщение при доступе к http://project3
почему это, я просто могу понять, какой шаг я пропустил, поскольку все, кажется, настроено правильно.
спасибо заранее.
5 ответов
проверяем, что :
- Apache может физически получить доступ к файлу (пользователь, который запускает apache, вероятно, www-data или apache, может получить доступ к файлу в файловой системе)
- Apache может перечислить содержимое папки (разрешение на чтение)
- Apache имеет директиву "Allow" для этой папки. Должен быть один для /var/ www/, вы можете проверить, например, vhost по умолчанию.
дополнительно, вы можете посмотреть на ошибку.файл журнала (обычно находится по адресу /var/log / apache2 / ошибка.log), который будет описывать, почему вы получаете ошибку 403 точно.
наконец, вы можете перезапустить apache, чтобы убедиться, что вся эта конфигурация применена.
Обычно это можно сделать с помощью /etc/init.d/apache2 restart
. В некоторой системе скрипт будет называться httpd. Просто выяснить.
я просто исправила эту проблему после борьбы в течение нескольких дней. Вот что сработало для меня:
во-первых, проверьте свой Apache error_log
file и посмотрите на последнее сообщение об ошибке.
-
если он говорит что-то вроде:
access to /mySite denied (filesystem path '/Users/myusername/Sites/mySite') because search permissions are missing on a component of the path
тогда есть проблема с вашими правами доступа к файлам. Вы можете исправить их, выполнив следующие команды из терминала:
$ cd /Users/myusername/Sites/mySite $ find . -type f -exec chmod 644 {} \; $ find . -type d -exec chmod 755 {} \;
затем обновите URL-адрес, где должен быть ваш сайт (например,
http://localhost/mySite
). Если вы все еще получаете ошибку 403, и если ваш Apacheerror_log
по-прежнему говорит то же самое, а затем постепенно двигаться вверх по дереву каталогов, регулируя разрешения для каталогов, как вы идете. Вы можете сделать это из терминала:$ cd .. $ chmod 755 mySite
при необходимости продолжайте:
$ cd .. $ chmod Sites
и, если необходимо,
$ cd .. $ chmod myusername
НЕ идти дальше. Ты можешь по-королевски испортить свою систему. Если вы все еще получаете сообщение об ошибке
search permissions are missing on a component of the path
, я не знаю, что вам делать. Тем не менее, я столкнулся с другой ошибкой (ниже), которую я исправил следующим образом: -
если
error_log
говорит что-то вроде:client denied by server configuration: /Users/myusername/Sites/mySite
тогда ваша проблема не в ваших разрешениях файлов, а вместо этого с вашей конфигурацией Apache.
обратите внимание, что в своем
httpd.conf
файл, вы увидите конфигурацию по умолчанию, как это (Apache 2.4+):<Directory /> AllowOverride none Require all denied </Directory>
или вот так (Apache 2.2):
<Directory /> Order deny,allow Deny from all </Directory>
НЕ изменить это! Мы не будем переопределять эти разрешения глобально, а вместо этого в вашем . Прежде, однако, убедитесь, что ваш хост
Include
в строкеhttpd.conf
is комментарии. Это должно выглядеть так. (Ваш путь может быть разным.)
открыть# Virtual hosts Include etc/extra/httpd-vhosts.conf
httpd-vhosts.conf
файл, который вы простоInclude
d. Добавьте запись для своей веб-страницы, если у вас ее еще нет. Это должно выглядеть примерно так этот. TheDocumentRoot
иDirectory
пути должны быть идентичными и должны указывать на то, где вашindex.html
или есть. Для меня это в пределахpublic
поддиректории.Для Apache 2.2:
<VirtualHost *:80> # ServerAdmin webmaster@dummy-host2.example.com DocumentRoot "/Users/myusername/Sites/mySite/public" ServerName mysite # ErrorLog "logs/dummy-host2.example.com-error_log" # CustomLog "logs/dummy-host2.example.com-access_log" common <Directory "/Users/myusername/Sites/mySite/public"> Options Indexes FollowSymLinks Includes ExecCGI AllowOverride All Order allow,deny Allow from all Require all granted </Directory> </VirtualHost>
строки говорят
AllowOverride All Require all granted
имеют решающее значение для Apache 2.4+. Без них вы не будете переопределять настройки Apache по умолчанию, указанные в
httpd.conf
. Обратите внимание, что если вы используете Apache 2.2, эти строки должны скажиOrder allow,deny Allow from all
это изменение было основным источником путаницы для гуглеров этой проблемы, таких как я, потому что копирование-вставка этих строк Apache 2.2 не будет работать в Apache 2.4+, а строки Apache 2.2 по-прежнему часто встречаются в старых потоках справки.
после того как вы сохранили ваши изменения, перезапустить Apache. Команда для этого будет зависеть от вашей ОС и установки, поэтому google отдельно, если вам нужна помощь он.
надеюсь, это поможет кому-то еще!
PS: Если у вас возникли проблемы с поиском этих .conf
файлы, попробуйте запустить , например:
$ find / -name httpd.conf
вы можете попробовать отключить SELinux и попробовать еще раз, используя следующую команду
setenforce 0