服务器无法读取 htaccess 文件,拒绝访问是安全的

Posted

技术标签:

【中文标题】服务器无法读取 htaccess 文件,拒绝访问是安全的【英文标题】:Server unable to read htaccess file, denying access to be safe 【发布时间】:2015-09-30 16:35:11 【问题描述】:

我使用 AngularJS 创建了一个简单的应用程序。当我尝试在我的网站http://demo.gaurabdahal.com/recipefinder 中托管该项目时,它显示以下错误:

禁止

您无权访问此服务器上的 /recipefinder。

但是,如果我转到http://demo.gaurabdahal.com/,它会按预期显示“访问被拒绝”消息,我已打印。但是为什么它无法打开AngularJS项目“recipefinder”。如果我尝试在其中放置一个简单的 html 应用程序,它就可以正常打开。

当我在 github (http://gaurabdahal.github.io/recipefinder) 中托管同一个 AngularJS 项目时,它可以正常工作

我不明白出了什么问题。

【问题讨论】:

Magento new host - 403 Forbidden - Server unable to read htaccess file的可能重复 即使我将文件权限设置为 777 ,它也不起作用。 每次你做chmod 777,世界某个地方就有一只小猫死了 如果它之前可以正常工作,而这只是突然发生的,请先尝试重新启动 Apache。没有更多的死亡小猫。 【参考方案1】:

我也有这个问题。我的建议是查看您的服务器错误日志文件。对我来说,项目的顶层目录不可读。错误日志清楚地说明了这一点。一个简单的

sudo chmod 755 <site_top_folder>

帮我修好了。

【讨论】:

这是您的系统文件夹路径设置不正确的原因。请打开以下文件并更正:index.php 在我的情况下,***目录设置为 750(不知道为什么),将其更改为 755 并且可以正常工作 这个&lt;site_top_folder&gt; 是最重要的。您应该授予 ROOT 文件夹的权限。它工作得很好。谢谢。 为什么-R ???这也会改变所有文件的权限...【参考方案2】:

将您的公共目录组设置为nobody。

【讨论】:

这是我遇到的问题。谢谢。【参考方案3】:

当您启动新网站时,这是 GoDaddy 虚拟服务器托管的常见问题。

假设您可以通过 SSH 访问服务器(您必须在 cPanel 上启用它),请登录您的帐户。成功登录后,您将被放置在您帐户的主目录中。您网站的 DocumentRoot 位于名为 public_html 的子目录中。 GoDaddy 默认此目录的权限为 750,但这些权限不足以让 Apache 读取网站文件。您需要将此目录的权限更改为 755 (chmod 755 public_html)。

将您网站的文件复制到 public_html 目录(scp 和 rsync 都用于将文件复制到 GoDaddy Linux 服务器)。

接下来,确保 public_html 下的所有文件都是全球可读的。为此,请使用以下命令:

cd public_html
chmod -R o+r *

如果您有其他子目录(如 css、js 和 img),请通过启用 read 和 execute 以进行世界访问,确保它们是世界可访问的:

chmod o+rx css
chmod o+rx img
chmod o+rx js

最后,您需要在 public_html 文件中有一个 .htaccess 文件。如果您的 public_html 目录中没有 .htaccess 文件,GoDaddy 会强制执行禁止加载站点的规则。您可以使用 vi 创建此文件(“vi .htaccess”)。在文件中输入以下行:

Order allow,deny
Allow from all
Require all granted

此配置适用于 Apache 2.2 和 Apache 2.4。保存文件(ZZ),然后确保文件的权限为644:

chmod 644 .htaccess

像魅力一样工作。

【讨论】:

确保 chmod 644 .htaccess 非常重要,否则它将无法正常工作! :)【参考方案4】:

您需要在/var/www/html/ 或您的项目所在的任何其他目录中运行这些命令:

sudo chgrp -R GROUP ./
sudo chown -R USER:GROUP ./
find ./ -type d -exec chmod 755 -R  \;
find ./ -type f -exec chmod 644  \;

在我的情况下(Apache Web 服务器),我使用 www-data 表示 USERGROUP

【讨论】:

如果您已经使用sudo chown -R USER:GROUP ./ 设置组,为什么还要使用sudo chgrp -R GROUP ./?这是多余的【参考方案5】:

每个公用文件夹都将权限设置为755。问题解决了。

【讨论】:

【参考方案6】:

GoDaddy 共享服务器解决方案

我在尝试在子域级别部署单独的 Laravel 项目时遇到了同样的问题。

文件结构

- public_html (where the main web app resides)
    [works fine]

    - booking.mydomain.com (folder for separate Laravel project)
        [showing error 403 forbidden]

解决方案

    转到您的 GoDaddy 帐户的 cPanel

    打开文件管理器

    浏览到显示 403 禁止错误的文件夹

    在文件管理器中,右键单击文件夹(在我的例子中是 booking.mydomain.com)

    选择更改权限

    选择以下复选框

     a) user - read, write, execute
     b) group - read, execute
     c) world - read, execute
    
     Permission code must display as 755
    

    点击更改权限

【讨论】:

【参考方案7】:

在linux中,

find project_directory_name_here -type d -exec chmod 755  \;
find project_directory_name_here -type f -exec chmod 644  \;

它将替换project_directory_name_here及其内部的所有文件和文件夹权限。

【讨论】:

@alib0ng0 ... 很高兴我能帮上忙【参考方案8】:

在我的情况下,apache 以某种方式配置错误(?)所以我也必须设置所有父目录的权限。仅将权限设置为 .htaccess(及其父目录)不起作用。

【讨论】:

【参考方案9】:

好的,我最近在Ubuntu 20.04 上的服务器上使用apache2 进行WordPress 安装时也遇到了同样的问题。

我在将文件所有权更改给其他用户时遇到了这个问题:

这对我有用:

$ sudo chown -R www-data:www-data /var/www/YOUR-DIRECTORY

以下是该问题的更多背景信息:

上述命令将[该文件夹中]所有文件的所有权授予 www-data 用户和组。这是运行 Apache Web 服务器的用户,Apache 需要能够读取和写入 WordPress 文件才能为网站提供服务并执行自动更新。

确保指向您服务器的相关目录(将YOUR-DIRECTORY 替换为您的实际文件夹)。

您可以在 digitalocean 上浏览此 insightful article。

【讨论】:

【参考方案10】:

对于Ubuntu上运行的Apache,解决方法是查看错误日志,显示错误与文件夹和文件权限有关。

首先,检查 Apache 错误日志

nano /var/log/apache2/error.log

然后将文件夹权限设置为可执行

sudo chmod 755 /var/www/html/

还将文件权限设置为可读

sudo chmod 644 /var/www/html/.htaccess

【讨论】:

是的,***主目录路径需要设置为 sudo chmod 755 /var/www/html 因为有时***目录未设置为 755【参考方案11】:

只是我的解决方案。我提取了一个文件,进行了一些小的更改,并得到了上面的错误。全部删除,再次上传解压,正常营业。

【讨论】:

【参考方案12】:

我在 Fedora 上遇到了同样的问题,发现问题是 selinux。 测试它是问题运行命令: sudo setenforce 0

否则或更改文件/etc/sysconfig/selinux

SELINUX=enforcing
to
SELINUX=disabled

或者向selinux添加规则以允许http访问

【讨论】:

【参考方案13】:

在 cpanel 中更改 php 版本后,我在 rackspeed 服务器上遇到了同样的问题。原来它也改变了文件夹的权限......我将文件夹的权限设置为755

chmod 755 folder_name

【讨论】:

不喜欢的原因?【参考方案14】:

我的经验中的要点:

服务器访问的每个资源都必须位于可执行且可读的目录中,因此其他答案中每个 chmod 中的 xx5。 大多数情况下,网络服务器(在我的例子中是 apache)既不是作为用户运行,也不是在拥有该目录的组中运行,所以xx5chmod o+rx 是必要的。

但我得出的更大结论是从小到大开始。

例如,如果 http://myserver.com/sites/all/resources/assets/css/bootstrap.css 产生 403 错误,看看 http://myserver.com/ 是否有效,然后是 sites,然后是 sites/all,然后是 sites/all/resources,以此类推。

如果您的服务器启用目录索引会有所帮助:

在 Apache 中:Options +Indexes

此说明也可能在您的网络服务器 public_html 文件夹的 .htaccess 中。

【讨论】:

既然已经问过这个问题,我将在这里发布我在不久前运行的系统上突然遇到同样的错误。根据 Apache2 error.log,它显然是在 /var/www 中寻找一个 .htaccess 文件,而那里从来没有。 /var/www/html 中有一个,站点文件夹中有其他。为什么突然出错?我正在运行 Ubuntu 19.10。【参考方案15】:

“服务器无法读取 htaccess 文件”就是这个意思。确保您的 .htaccess 文件的权限是全球可读的。

【讨论】:

在 Unix 或 Linux 主机上? chmod 644 .htaccess

以上是关于服务器无法读取 htaccess 文件,拒绝访问是安全的的主要内容,如果未能解决你的问题,请参考以下文章

服务器无法读取htaccess文件

PHP强制下载,htaccess拒绝所有,无法读取文件头

.htaccess 拒绝目录访问

Apache 2.4 .htaccess 文件不拒绝访问

为啥我在尝试访问此 WordPress 网站时收到此 403 Forbidden 错误?为啥它无法读取 .htaccess 文件?

如何使用 htaccess 拒绝对文件夹的直接访问