Forbidden 您无权访问此服务器。 Centos 6 / Laravel 4

Posted

技术标签:

【中文标题】Forbidden 您无权访问此服务器。 Centos 6 / Laravel 4【英文标题】:Forbidden You don't have permission to access on this server. Centos 6 / Laravel 4 【发布时间】:2014-02-25 06:13:38 【问题描述】:

在我完成设置 LAMP 并安装我的 laravel 4 应用程序后,我遇到了一个问题。一切似乎都很顺利,当我继续使用我的 ip 地址 url 时,它会正确显示我的应用程序的第一页,但页面的所有其余部分都会向我抛出 404 错误请求的 URL 在此服务器上找不到。

所以我添加到我的 httpd.conf(在我的项目的虚拟主机下) - 允许覆盖所有 命令允许,拒绝

<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 错误时,我得到了 Forbidden 您无权访问此服务器。 我设置了chmod 775 -R path/laravel/ 和777 的文件夹存储,但我仍然遇到同样的错误,请问有什么建议吗?我无法弄清楚这个问题我快疯了!感谢您的帮助。

【问题讨论】:

确保文件夹的所有者是网络服务器用户的所有者。 ls -l 将显示文件属于谁。 你对网络服务器用户意味着什么?我在我的 vps 上拥有 root 访问权限,但我创建了另一个名为 nextmatch(项目名称)的用户,并且该用户是所有者。 在下面回答了您的问题。 【参考方案1】:

网络服务器作为特定用户下的守护程序(服务)启动。该用户在 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/

【讨论】:

我关闭了 selinux 并且它可以工作,但我想这不是一个好主意...如何设置 selinux 以访问此文件夹? 更新了答案。本质上,使用 restorecon 命令为文件和文件夹恢复正确的 selinux 上下文【参考方案2】:

如果您使用的是 CentOS,则可能是 selinux 的问题。检查是否使用“sestatus”启用了 selinux。如果已启用,您可以使用“sudo setenforce 0”检查是否(暂时)是问题所在。如果 apache 可以为站点提供服务,那么您只需要使用 'sudo chcon -R -t httpd_sys_content_t' 递归更改文件的上下文(您可以使用 'ls -Z' 检查现有上下文。

Selinux 可能不是问题,但值得一试。

【讨论】:

【参考方案3】:

在文件夹中试试这个:

chcon -R -t httpd_sys_content_t *

【讨论】:

【参考方案4】:
chcon -R -t httpd_sys_content_t *

为我做了诀窍。

【讨论】:

【参考方案5】:

来自 /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>

【讨论】:

以上是关于Forbidden 您无权访问此服务器。 Centos 6 / Laravel 4的主要内容,如果未能解决你的问题,请参考以下文章

Heroku 上的 Laravel 5.4。 Forbidden 您无权访问此服务器上的 /

您无权访问此服务器上的 /php/send.php 403 Forbidden [重复]

Ubuntu 12.10 Forbidden - 您无权访问此服务器上的 / [关闭]

Forbidden 您无权访问此服务器。 Centos 6 / Laravel 4

403 Forbidden 您无权访问此服务器上的 /c:/wamp/www/index.php

WAMP : Forbidden 您无权访问此服务器上的 /。 Apache/2.4.18 (Win64) PHP/5.6.19