没有权限访问该服务器。Centos 6 / Laravel 4。

12

我在设置LAMP并安装我的Laravel 4应用程序后遇到了问题。当我访问我的IP地址URL时,第一页正确显示,但其他页面都会抛出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,但仍然遇到相同的错误。请问有什么建议吗?我无法解决这个问题,感到非常困惑!谢谢您的任何帮助。

确保文件夹的所有者是Web服务器用户。ls -l命令将显示文件属于谁。 - Rijndael
什么是 Web 服务器用户?我在我的 VPS 上拥有 root 访问权限,但我创建了另一个名为 nextmatch(该项目的名称)的用户,并将其设置为所有者。 - Fabrizio Fenoglio
已在下面回答了您的查询。 - Rijndael
5个回答

13

Web服务器作为一个守护进程(服务)在特定用户下启动。该用户在httpd.conf中定义。默认情况下,该用户将是apache。不要将apache用户与httpd进程混淆。后者是Web服务器守护进程,前者是它将要运行的用户。如果您创建的文件夹属于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/

我关闭了selinux,它可以工作,但我想这不是一个好主意... 我该如何设置selinux以允许访问此文件夹? - pateto777
更新的答案。基本上,使用restorecon命令来恢复文件和文件夹的正确selinux上下文。 - Rijndael

8
如果您使用的是CentOS系统,可能与selinux有关。请检查是否启用了selinux,并使用“sestatus”进行确认。如果已启用,您可以使用“sudo setenforce 0”临时检查问题是否存在。如果Apache可以服务该站点,则只需使用“sudo chcon -R -t httpd_sys_content_t”递归更改文件的上下文(可以使用“ls -Z”检查现有上下文)即可。虽然selinux可能不是问题,但检查一下也无妨。

5

请在文件夹内尝试此操作:

chcon -R -t httpd_sys_content_t *

2
chcon -R -t httpd_sys_content_t *

这对我来说解决了问题。


0

从/etc/apache2/mods-available中的php5.conf文件

# 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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接