Apache给出了403个禁止的错误

27 html apache vhosts

好的,所以我以前设置了两个虚拟主机,它们工作正常.它们都包含简单的Web项目,http://project1并且可以http://project2在浏览器中正常工作.

无论如何,我来添加另一个vhost.我使用127.0.0.1 project3编辑了/ etc/hosts文件,并通过复制和粘贴project2的先前条目并编辑文件路径来更新httpd-vhosts.conf文件.

我已经检查了所有文件和文件夹权限(实际上我是从project2复制并粘贴的),只是在index.php文件中放了一个"hello world"消息.

访问时我收到403禁止权限被拒绝的消息 http://project3

为什么这样,我只能弄清楚我错过了什么步骤,因为一切似乎都设置正确.

提前致谢.

blu*_*112 24

检查:

  • Apache可以物理访问该文件(运行apache的用户,可能是www-data或apache,可以访问文件系统中的文件)
  • Apache可以列出文件夹的内容(读取权限)
  • Apache对该文件夹有一个"允许"指令./ var/www /应该有一个,你可以查看默认的vhost.

此外,您可以查看error.log文件(通常位于/var/log/apache2/error.log),该文件将描述您为何准确收到403错误.

最后,您可能想要重新启动apache,以确保应用所有配置.这通常可以用/etc/init.d/apache2 restart.在某些系统上,该脚本将被称为httpd.弄清楚.


Cam*_*son 11

我只是在挣扎了几天后解决了这个问题.这对我有用:

首先,检查您的Apache error_log文件并查看最新的错误消息.

  • 如果它说的话:

    access to /mySite denied (filesystem path
    '/Users/myusername/Sites/mySite') because search permissions
    are missing on a component of the path
    
    Run Code Online (Sandbox Code Playgroud)

    那么您的文件权限就会出现问题.您可以通过从终端运行以下命令来修复它们:

    $ cd /Users/myusername/Sites/mySite
    $ find . -type f -exec chmod 644 {} \;
    $ find . -type d -exec chmod 755 {} \;
    
    Run Code Online (Sandbox Code Playgroud)

    然后,刷新您的网站所在的URL(例如http://localhost/mySite).如果您仍然收到403错误,并且您的Apache error_log仍然说同样的事情,那么逐步向上移动目录树,随时调整目录权限.您可以通过以下方式从终端执行此操作:

    $ cd ..
    $ chmod 755 mySite
    
    Run Code Online (Sandbox Code Playgroud)

    如有必要,继续:

    $ cd ..
    $ chmod Sites 
    
    Run Code Online (Sandbox Code Playgroud)

    并且,如有必要,

    $ cd ..
    $ chmod myusername
    
    Run Code Online (Sandbox Code Playgroud)

    不要再往上走了.你可能会搞砸你的系统.如果你仍然收到错误search permissions are missing on a component of the path,我不知道你应该怎么做.但是,我遇到了一个不同的错误(下面的错误),我修复如下:

  • 如果你error_log说的话:

    client denied by server configuration:
    /Users/myusername/Sites/mySite
    
    Run Code Online (Sandbox Code Playgroud)

    那么你的问题不是你的文件权限,而是你的Apache配置.

    请注意,在您的httpd.conf文件中,您将看到这样的默认配置(Apache 2.4+):

    <Directory />
        AllowOverride none
        Require all denied
    </Directory>
    
    Run Code Online (Sandbox Code Playgroud)

    或者像这样(Apache 2.2):

    <Directory />
      Order deny,allow
      Deny from all
    </Directory>
    
    Run Code Online (Sandbox Code Playgroud)

    不要改变这个!我们不会全局覆盖这些权限,而是覆盖在您的httpd-vhosts.conf文件中.但是,首先,请确保您的虚拟主机Include的线路httpd.conf取消注释.它看起来应该是这样的.(您的确切路径可能会有所不同.)

    # Virtual hosts
    Include etc/extra/httpd-vhosts.conf
    
    Run Code Online (Sandbox Code Playgroud)

    现在,打开httpd-vhosts.conf你刚才的文件Include.如果您还没有,请为您的网页添加条目.看起来应该是这样的.该DocumentRootDirectory路径应该是相同的,而应指向哪里你index.htmlindex.php文件的位置.对我来说,这是在public子目录中.

    对于Apache 2.2:

    <VirtualHost *:80>
    #     ServerAdmin webmaster@dummy-host2.example.com
        DocumentRoot "/Users/myusername/Sites/mySite/public"
        ServerName mysite
    #     ErrorLog "logs/dummy-host2.example.com-error_log"
    #     CustomLog "logs/dummy-host2.example.com-access_log" common
        <Directory "/Users/myusername/Sites/mySite/public">
            Options Indexes FollowSymLinks Includes ExecCGI
            AllowOverride All
            Order allow,deny
            Allow from all
            Require all granted
        </Directory>
    </VirtualHost>
    
    Run Code Online (Sandbox Code Playgroud)

    这句话说

    AllowOverride All
    Require all granted
    
    Run Code Online (Sandbox Code Playgroud)

    对Apache 2.4+至关重要.如果没有这些,您将不会覆盖指定的默认Apache设置httpd.conf.请注意,如果您使用的是Apache 2.2,请注意这些行

    Order allow,deny
    Allow from all
    
    Run Code Online (Sandbox Code Playgroud)

    这个变化一直是这个问题的googlers混淆的主要原因,比如我,因为复制粘贴这些Apache 2.2行在Apache 2.4+中不起作用,并且Apache 2.2行仍然常见于较旧的帮助线程.

    保存更改后,重新启动Apache.此命令将取决于您的操作系统和安装,因此如果您需要帮助,请单独使用谷歌.

我希望这有助于其他人!


PS:如果您在查找这些.conf文件时遇到问题,请尝试运行该find命令,例如:

$ find / -name httpd.conf
Run Code Online (Sandbox Code Playgroud)


小智 7

restorecon 命令的工作原理如下:

restorecon -v -R /var/www/html/
Run Code Online (Sandbox Code Playgroud)

  • 这应该怎么办? (4认同)