Запрещено У вас нет разрешения на доступ к этому серверу. Centos 6 / Laravel 4

У меня возникла проблема после того, как я закончил настройку LAMP и установил приложение laravel 4. Кажется, все прошло хорошо, когда я перехожу по URL-адресу своего IP-адреса, он правильно показывает мне первую страницу моего приложения, но вся остальная страница выдает мне ошибку 404. Запрошенный URL-адрес не был найден на этом сервере.

Поэтому я добавил в свой httpd.conf (под виртуальным хостом моего проекта) - AllowOverride All Order allow, deny

<VirtualHost *:80>
        ServerName VPS-IP-ADDRESS
        DocumentRoot /var/www/html/nextmatch/public_html/public/

       <Directory /var/www/html/nextmatch/public_html/public/>
         AllowOverride all
         Order allow,deny
          <IfModule mod_rewrite.c>
          Options -MultiViews
          RewriteEngine On
          RewriteCond %{REQUEST_FILENAME} !-f
         RewriteRule ^ index.php [L]
       </IfModule>
</Directory>
</VirtualHost>

И теперь, когда я пытаюсь перейти, вместо этого появляется ошибка 404, которую я получил Запрещено. У вас нет разрешения на доступ к этому серверу. Я установил chmod 775 -R path/laravel/, а хранилище папок - 777, но все равно получаю ту же ошибку. Подскажите, пожалуйста? Я не могу решить эту проблему, я схожу с ума! Спасибо за любую помощь.


person Fabrizio Fenoglio    schedule 01.02.2014    source источник
comment
Убедитесь, что владельцем папки является пользователь веб-сервера. ls -l покажет, кому принадлежат файлы.   -  person Rijndael    schedule 01.02.2014
comment
что вы имеете в виду под пользователем веб-сервера? У меня есть root-доступ к моему vps, но я создал другого пользователя с именем nextmatch (имя проекта), и этот пользователь является владельцем.   -  person Fabrizio Fenoglio    schedule 01.02.2014
comment
Ответил на ваш вопрос ниже.   -  person Rijndael    schedule 02.02.2014


Ответы (5)


Веб-сервер запускается как демон (служба) под определенным пользователем. Этот пользователь определен в httpd.conf. По умолчанию этим пользователем будет apache. Не путайте пользователя apache с процессом httpd. Последний - это демон веб-сервера, а первый - это пользователь, под которым он будет работать. Если созданная вами папка принадлежит пользователю root или другому пользователю, кроме указанного в httpd.conf, apache не сможет получить к ней доступ. Чтобы определить эту проблему, перейдите в папку и выполните команду ls -l. Если пользователь определяет в httpd.conf apache, то для доступа к папке вы должны увидеть:

drwxr-xr-x.  2 apache apache    4096 Jan  8  2013 public_folder

Обратите внимание: там написано «apache apache», что означает, что он принадлежит пользователю и группе apache. Если вы создали его через root, вы, вероятно, увидите:

drwxr-xr-x.  2 root root    4096 Jan  8  2013 public_folder

Пользователь apache не может получить доступ к папке, определенной пользователем root. Чтобы решить эту проблему, выполните команду:

chown -R apache:apache myfolder

Параметр -R является рекурсивным, поэтому он обновляет право собственности на ВСЕ папки и файлы в этой папке пользователю apache.

Если ваше право собственности в порядке, попробуйте «временно» отключить selinux. На centos вы делаете:

setenforce 0

Что выключит selinux до следующего перезапуска. В идеале вы захотите оставить selinux включенным для дополнительной безопасности и установить допустимый контекст для ваших файлов и папок apache.

Если выключение selinux действительно работает, возможно, у вас неправильный контекст безопасности для ваших файлов и папок. выполните следующую команду, чтобы восстановить контексты безопасности:

restorecon -R -v /var/www/
person Rijndael    schedule 01.02.2014
comment
Я выключил selinux, и он работает, но я думаю, это плохая идея ... Как мне настроить selinux на предоставление доступа к этой папке? - person pateto777; 01.07.2016
comment
Обновленный ответ. По сути, используйте команду restorecon для восстановления правильных контекстов selinux для файлов и папок. - person Rijndael; 06.07.2016

Если вы используете CentOS, это может быть проблема с selinux. Проверьте, включен ли selinux с помощью 'sestatus'. Если он включен, вы можете проверить, не является ли это проблемой (временно), используя sudo setenforce 0. Если apache может обслуживать сайт, вам просто нужно рекурсивно изменить контекст файлов с помощью sudo chcon -R -t httpd_sys_content_t (вы можете проверить существующий контекст с помощью ls -Z.

Селинукс может не быть проблемой, но его стоит проверить.

person iavery    schedule 01.02.2014

попробуйте это внутри папки:

chcon -R -t httpd_sys_content_t *
person Mahdi    schedule 18.02.2015

chcon -R -t httpd_sys_content_t *

сделал трюк для меня.

person tummie    schedule 27.04.2015

из php5.conf в / etc / apache2 / mods-available

# Running PHP scripts in user directories is disabled by default
# 
# To re-enable PHP in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
#<IfModule mod_userdir.c>
#    <Directory /home/*/public_html>
#        php_admin_value engine Off
#    </Directory>
#</IfModule>
person Douglas G. Allen    schedule 10.12.2014