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


80

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

禁止的

您无权访问此服务器上的/ recipefinder。服务器无法读取htaccess文件,拒绝访问是安全的

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

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

我不明白怎么了



即使我将文件权限设置为777,它也无法正常工作。
索拉布,2015年

99
每次您做的事chmod 777,世界上的某个地方都会死一只小猫
janos

1
如果它以前曾经工作过,并且突然出现这种情况,请尝试首先重新启动Apache。没有更多的死亡小猫。
sglessard '17

Answers:


161

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

sudo chmod 755 <site_top_folder>

为我修复它。


这是您的系统文件夹路径未正确设置的原因。请打开以下文件并更正此文件:index.php

10
在我的情况的顶级目录设置为750(不知道为什么),把它改成755,它的工作
保罗

<site_top_folder>是最重要的。您应授予ROOT文件夹权限。工作正常。谢谢。
Chaminda Bandara

为什么-R?这还将更改所有文件的权限...
黑色


22

当您打开一个新网站时,这是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),请通过启用对世界的读取和执行来确保它们在世界范围内可访问:

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

奇迹般有效。


2
确保chmod 644 .htaccess非常重要,否则它将无法正常工作!:)
点亮

17

您需要在/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


11

每个公用文件夹都对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]

  1. 转到您的GoDaddy帐户的cPanel

  2. 打开文件管理器

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

  4. 在文件管理器中,右键单击该文件夹(在我的情况下为booking.mydomain.com)

  5. 选择更改权限

  6. 选择以下复选框

     a) user - read, write, execute
     b) group - read, execute
     c) world - read, execute
    
     Permission code must display as 755
    
  7. 点击更改权限


4

在我的情况下,apache被配置为错误的(?),因此我也必须为所有父目录设置权限。只是将权限设置为.htaccess(及其父目录)无效。


2

对于在Ubuntu上运行的Apache,解决方案是检查错误日志,这表明该错误与文件夹和文件权限有关。

首先,检查Apache错误日志

nano /var/log/apache2/error.log

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

sudo chmod 755 /var/www/html/

还将文件权限设置为可读

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

1

只是我的解决方案。我提取了一个文件,做了一些小的更改,并得到了上面的错误。删除所有内容,再次上传并提取,恢复正常。


1

在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及其内部内容。


0

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

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

SELINUX=enforcing
to
SELINUX=disabled

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


-1

我的经验重点:

  • 服务器访问的每个资源都必须位于可执行文件和可读目录中,因此xx5,每个答案中的每个chmod中都应包含该资源。
  • 大多数情况下,Web服务器(以我的情况为Apache)既不以用户身份运行,也不以拥有目录的组身份运行,因此xx5还是chmod 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

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


既然已经提出了问题,我将在这里发布,我在不久前运行的系统上突然遇到了同样的错误。根据Apache2 error.log,显然在/ var / www中寻找一个.htaccess文件时,从来没有一个文件。虽然/ var / www / html中有一个,但站点文件夹中有一个。为什么会突然出现错误?我正在运行Ubuntu 19.10。
DonP

-1

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

chmod 755 folder_name

-9

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


1
在Unix或Linux主机上?chmod 644 .htaccess
200_success
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.