71

我是 Windows 用户。我已经使用 xampp 有一段时间了,但突然间我的 .php 文件现在都没有工作了!我收到此错误消息:


禁止访问!

您无权访问请求的对象。它要么是读保护的,要么是服务器不可读的。

如果您认为这是服务器错误,请联系网站管理员。

错误 403

本地主机 Apache/2.4.4 (Win32) OpenSSL/0.9.8y PHP/5.4.16


我可以在 localhost/Practice 中看到我的 .php 文件列表(Practice 是我保存文件的文件夹)该文件甚至会在我单击它时打开。但是,当我单击任何文件中的任何“提交”按钮时,都会出现此错误。请帮忙!我将 xampp 从 1.8.1 更新到 1.8.2,但同样的问题仍然存在!

4

16 回答 16

152

尝试使用下面的代码,将其添加到您的虚拟主机配置中。将此行添加到httpd-vhosts.conf文件中:

<Directory "c:/<path-to-projects>/">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride all
        Order Deny,Allow
        Allow from all
        Require all granted
</Directory>

我通过这种方式解决了同样的问题。希望能帮助到你。

笔记:

更改后请以隐身方式对其进行测试,因为您已通过缓存重定向

于 2014-05-11T16:07:05.277 回答
18

如果使用 ubuntu 操作系统,则检查 /Practice 文件夹的 chmod 更改读写权限

打开终端按快捷键 Ctrl+Alt+T Goto

$ cd /opt/lampp/htdocs/

chmod并使用命令更改文件夹读写和执行权限

例如文件夹名称是实践和文件夹路径/opt/lampp/htdocs/practice

键入命令

$ sudo chmod 777 -R Practice

什么是chmod777?访问此链接 http://linuxcommand.org/lts0070.php

于 2015-05-25T14:16:17.427 回答
11

我解决这个问题的方法是正确设置错误日志,首先

<VirtualHost *:80>
    DocumentRoot "D:/websites/test/"
    ServerName test.dev
    ErrorLog "D:/websites/test/logs/error.log"
    CustomLog "D:/websites/test/logs/access.log" common
    <Directory D:/websites/test/>  
        AllowOverride none
        Require all granted  
    </Directory>
</VirtualHost>

将此错误登录到“D:/websites/test/logs/”后,请确保自己创建日志文件夹。错误日志中记录的确切错误是

AH01630:客户端被服务器配置拒绝:

这指出我使用此链接纠正解决方案,说明上述错误

Require all granted 

是必须的。我上面的示例代码顺便解决了这个问题。

于 2017-12-29T12:28:35.437 回答
8

对于 Mac 上的 XAMPP

sudo chmod -R 0777 /Applications/XAMPP/xamppfiles/htdocs/myprojectname

注意:请记住将“myprojectname”更改为您的实际项目名称。此外,请确保项目位于 htdocs 的根目录或相应地更改路径。

于 2019-11-24T08:48:24.320 回答
5

我正在使用 ubuntu 16.04 使用 xxamp - 它对我来说工作正常

<VirtualHost *:80>
    DocumentRoot "/opt/lampp/htdocs/"
    ServerAdmin localhost
    <Directory "/opt/lampp/htdocs">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
于 2018-01-17T12:27:44.533 回答
5

在花费数小时在线研究后对我有用的唯一解决方案

sudo chmod -R 0777 /opt/lampp/htdocs/projectname
于 2019-11-15T03:26:25.640 回答
4

进入你的 Xampp 文件夹xampp/apache/conf/extra/httpd-xampp.c­onf

编辑最后一段:

#close XAMPP sites here 
.
.
.
Deny from all
.
.

#close XAMPP sites here 
.
.
.
Allow from all
.
.

或者只是观看此视频:http ://www.youtube.com/watch?v=ZUAKLUZa-AU 。

于 2013-07-23T17:24:41.370 回答
2

编辑此文件C:\xampp\apache\conf\httpd.conf 更改:

AllowOverride none
Require all denied

AllowOverride All
Options  All
Allow from all
Order allow,deny

重启阿帕奇

于 2021-06-26T13:20:23.367 回答
2

对我来说,它立即通过以下方式解决

  1. 去 C:\xampp\apache\conf\extra
  2. 在文件 httpd-xampp.conf 内编辑
  3. 编辑文件如下:

通过 cont+f 找到以下行:

Alias /phpmyadmin "C:/xampp/phpMyAdmin/"
<Directory "C:/xampp/phpMyAdmin">
    AllowOverride AuthConfig
    Require local
    ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
</Directory>

只更改本地---->全部授予,所以它变成了这样

Alias /phpmyadmin "C:/xampp/phpMyAdmin/"
<Directory "C:/xampp/phpMyAdmin">
    AllowOverride AuthConfig
    Require all granted
    ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
</Directory>

在此之后,本地主机将停止显示错误并显示管理面板。我在这里的视频中找到了这个解决方案: https ://www.youtube.com/watch?v=MvYyEPaNNhE

于 2018-12-20T19:09:45.403 回答
1

在虚拟主机停止工作之前,您是否更改了任何内容?

将此行添加到 xampp/apache/conf/extra/httpd-vhosts.conf

<VirtualHost localhost:80>
    DocumentRoot "C:/xampp/htdocs"
    ServerAdmin localhost
    <Directory "C:/xampp/htdocs">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
于 2016-07-17T13:28:58.487 回答
1

我有同样的问题。所以我被记住了。昨天我在 htttp-xampp.conf 中评论了这段代码

Alias /phpmyadmin "C:/xampp/phpMyAdmin/"
    <Directory "C:/xampp/phpMyAdmin">
#        AllowOverride AuthConfig
#        Require local
#        ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
    </Directory>

所以我可以使用同一网络(LAN / WIFI)上的其他系统访问我的本地主机,因为它使本地主机需要本地。

所以我只是让它像

Alias /phpmyadmin "C:/xampp/phpMyAdmin/"
    <Directory "C:/xampp/phpMyAdmin">
        AllowOverride AuthConfig
#        Require local
        ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
    </Directory>

现在它可以在我的本地机器上运行,并且可以使用同一 LAN/WIFI 上的其他系统访问 localhost。

于 2016-05-30T08:53:13.020 回答
1

将 htdocs 文件夹移动到 xampp 文件夹之外后,我遇到了这个问题。如果这样做,则需要更改 httpd.conf 中的文档根目录。请参阅https://stackoverflow.com/a/1414/3543329

于 2016-05-05T18:37:46.613 回答
0

我得到了同样的错误,因为不知何故删除了 index.php 并在没有 index.php 的情况下访问文件夹给出了同样的错误。

于 2020-08-23T10:00:38.310 回答
0

以下步骤可能对任何人都有帮助

  1. 检查apache2的错误日志
  2. 检查文件夹权限是否可以访问?如果不设置
  3. 在 vhost 文件中添加以下内容 <Directory "c://"> 选项索引 FollowSymLinks MultiViews AllowOverride all Order Deny,Allow Allow from all 要求全部授予
  4. 最后但可能会节省时间,例如我的检查文件夹名称(区分大小写的“Pubic”与“public”不同)您放入 vhosts 文件和实际名称。谢谢
于 2020-10-10T09:08:28.330 回答
0
A. #LoadModule vhost_alias_module modules/mod_vhost_alias.so
B. <Directory />
    AllowOverride none
    Require all denied
</Directory>

用。。。来代替:

A. LoadModule vhost_alias_module modules/mod_vhost_alias.so
B:
<Directory />
    Options FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

来自E: \xamp**apache\conf/httpd.conf**

于 2017-12-04T04:55:45.727 回答
-1

在我的例子中,我将 Drupal 实例从服务器导出到 XAMPP 上的 localhost。它显然对文件和目录所有权不公平,Apache 抛出了上述错误。

这是最初的文件和目录的所有权:

在此处输入图像描述

要授予对我的文件的读取权限并对我的目录执行权限,我可以这样做,以便所有用户都可以读取、写入和执行:

sudo chmod 777 -R

但这不是理想的解决方案,因为这将被迁移回服务器,最终可能会出现安全漏洞。

此博客中给出了一个脚本:https ://www.drupal.org/node/244924

#!/bin/bash

# Help menu
print_help() {
cat <<-HELP
This script is used to fix permissions of a Drupal installation
you need to provide the following arguments:

  1) Path to your Drupal installation.
  2) Username of the user that you want to give files/directories ownership.
  3) HTTPD group name (defaults to www-data for Apache).

Usage: (sudo) bash ${0##*/} --drupal_path=PATH --drupal_user=USER --httpd_group=GROUP
Example: (sudo) bash ${0##*/} --drupal_path=/usr/local/apache2/htdocs --drupal_user=john --httpd_group=www-data
HELP
exit 0
}

if [ $(id -u) != 0 ]; then
  printf "**************************************\n"
  printf "* Error: You must run this with sudo or root*\n"
  printf "**************************************\n"
  print_help
  exit 1
fi

drupal_path=${1%/}
drupal_user=${2}
httpd_group="${3:-www-data}"

# Parse Command Line Arguments
while [ "$#" -gt 0 ]; do
  case "$1" in
    --drupal_path=*)
        drupal_path="${1#*=}"
        ;;
    --drupal_user=*)
        drupal_user="${1#*=}"
        ;;
    --httpd_group=*)
        httpd_group="${1#*=}"
        ;;
    --help) print_help;;
    *)
      printf "***********************************************************\n"
      printf "* Error: Invalid argument, run --help for valid arguments. *\n"
      printf "***********************************************************\n"
      exit 1
  esac
  shift
done

if [ -z "${drupal_path}" ] || [ ! -d "${drupal_path}/sites" ] || [ ! -f "${drupal_path}/core/modules/system/system.module" ] && [ ! -f "${drupal_path}/modules/system/system.module" ]; then
  printf "*********************************************\n"
  printf "* Error: Please provide a valid Drupal path. *\n"
  printf "*********************************************\n"
  print_help
  exit 1
fi

if [ -z "${drupal_user}" ] || [[ $(id -un "${drupal_user}" 2> /dev/null) != "${drupal_user}" ]]; then
  printf "*************************************\n"
  printf "* Error: Please provide a valid user. *\n"
  printf "*************************************\n"
  print_help
  exit 1
fi

cd $drupal_path
printf "Changing ownership of all contents of "${drupal_path}":\n user => "${drupal_user}" \t group => "${httpd_group}"\n"
chown -R ${drupal_user}:${httpd_group} .

printf "Changing permissions of all directories inside "${drupal_path}" to "rwxr-x---"...\n"
find . -type d -exec chmod u=rwx,g=rx,o= '{}' \;

printf "Changing permissions of all files inside "${drupal_path}" to "rw-r-----"...\n"
find . -type f -exec chmod u=rw,g=r,o= '{}' \;

printf "Changing permissions of "files" directories in "${drupal_path}/sites" to "rwxrwx---"...\n"
cd sites
find . -type d -name files -exec chmod ug=rwx,o= '{}' \;

printf "Changing permissions of all files inside all "files" directories in "${drupal_path}/sites" to "rw-rw----"...\n"
printf "Changing permissions of all directories inside all "files" directories in "${drupal_path}/sites" to "rwxrwx---"...\n"
for x in ./*/files; do
  find ${x} -type d -exec chmod ug=rwx,o= '{}' \;
  find ${x} -type f -exec chmod ug=rw,o= '{}' \;
done
echo "Done setting proper permissions on files and directories"

并且需要调用命令:

sudo bash /Applications/XAMPP/xamppfiles/htdocs/fix-permissions.sh --drupal_path=/Applications/XAMPP/xamppfiles/htdocs/rkmission --drupal_user=daemon --httpd_group=admin

在我的情况下,运行 Apache 的用户是“守护进程”。您可以通过 localhost 在 php 文件中运行此 php 脚本来识别用户:

<?php echo exec('whoami');?>

下面是对 Drupal 具有正确文件权限的正确用户:

在此处输入图像描述

将其传输回服务器后,您可能必须将其更改回来!

于 2017-08-03T05:21:19.263 回答