Mac自带apache2搭建服务请求localhost报 403 Forbidden

16 篇文章 1 订阅
6 篇文章 0 订阅

       Mac自带的apache2服务根据网上一堆教程配置并成功启动,但希望将 /etc/apache2/httpd.conf 配置文件中的 DocumentRoot 改为自己想设置的目录,这样方便以后从Mac上直接打开目录修改代码。

但是改完 DocumentRoot 后重启发现访问 localhost 报 403 Forbidden错误

 在/private/var/log/apache2/目录中的error_log打印如下错误:

检查如下: 

1、apache2版本(2.2版本和2.4版本部分配置参数不同,见Apache官方文档

2、现象:

      1> apache服务正常启动不报错;

sudo apachectl -k start

      2> /etc/apache2/httpd.conf配置文件中检查如下配置:

          ① ServerName 127.0.0.1:80

          ② 所有的 AllowOverride 都是 All,所有的 Require all 都是 granted

          ③ 相关文件和目录均有读写权限

      3>DocumentRoot 默认是 /Library/WebServer/Documents/,浏览器访问localhost时显示It works!,可以请求成功。

原因及解决方案:

Mac系统有自己的一套文件访问保护策略,需要豁免apache访问这些文件的限制,步骤如下:

1、打开“系统偏好设置”->“安全性与隐私”;

 2、选择“隐私”->“完全磁盘访问权限”,点“解锁”,输入密码后解除锁定;

3、 解除锁定后,在右侧点击“添加”

 4、此时在列表中列出了可选择的目录及文件,但并没有将Linux中的根目录/等隐藏目录显示出来,可以在如下图位置选择Mac的整个HD硬盘

5、按组合快捷键:Command+Shift+.(也就是 > 键),此时可以看到隐藏目录都显示了出来,最终选中apache的服务,确定在第3步中的列表中已勾选httpd,并重新锁定。

6、重新访问localhost,可以看到返回如下内容,说明响应成功。

      DocumentRoot的默认目录 /Library/WebServer/Documents/ 下有文件:index.html.en,此文件的内容是:

<html><body><h1>It works!</h1></body></html>

将此文件复制到自己设置的目录中,就会显示上面的It works! 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当在使用 Ajax 发送 POST 请求时遇到 "403 Forbidden-null" 错误,通常是由于 CSRF(Cross-Site Request Forgery)保护机制引起的。 Django 默认开启了 CSRF 保护,要在发送非 GET 请求时包含正确的 CSRF Token。你可以通过以下几种方法来解决这个问题: 1. 在 Ajax 请求的头部中包含 CSRF Token: ```javascript var csrftoken = document.querySelector('[name=csrfmiddlewaretoken]').value; $.ajax({ url: 'your-url', type: 'POST', headers: { 'X-CSRFToken': csrftoken }, data: JSON.stringify(yourData), contentType: 'application/json', dataType: 'json', success: function(response) { // 处理成功响应 }, error: function(xhr, errmsg, err) { // 处理错误响应 } }); ``` 2. 使用 Django 提供的 `csrf_exempt` 装饰器来跳过 CSRF 保护,但这不是推荐的做法,因为会降低安全性: ```python from django.views.decorators.csrf import csrf_exempt @csrf_exempt def your_view(request): # 处理请求 ``` 3. 如果你使用的是 Django Rest Framework(DRF),可以在全局配置中禁用 CSRF 保护: ```python # settings.py REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( # 其他身份验证类... ), 'DEFAULT_PERMISSION_CLASSES': ( # 其他权限类... ), 'DEFAULT_RENDERER_CLASSES': ( 'rest_framework.renderers.JSONRenderer', ), 'DEFAULT_PARSER_CLASSES': ( 'rest_framework.parsers.JSONParser', ), 'DEFAULT_AUTHENTICATION_CLASSES': ( # 其他身份验证类... ), 'DEFAULT_PERMISSION_CLASSES': ( # 其他权限类... ), 'DEFAULT_RENDERER_CLASSES': ( 'rest_framework.renderers.JSONRenderer', ), 'DEFAULT_PARSER_CLASSES': ( 'rest_framework.parsers.JSONParser', ), 'DEFAULT_AUTHENTICATION_CLASSES': ( # 其他身份验证类... ), 'DEFAULT_PERMISSION_CLASSES': ( # 其他权限类... ), 'DEFAULT_RENDERER_CLASSES': ( 'rest_framework.renderers.JSONRenderer', ), 'DEFAULT_PARSER_CLASSES': ( 'rest_framework.parsers.JSONParser', ), 'DEFAULT_AUTHENTICATION_CLASSES': ( # 其他身份验证类... ), 'DEFAULT_PERMISSION_CLASSES': ( # 其他权限类... ), 'DEFAULT_RENDERER_CLASSES': ( 'rest_framework.renderers.JSONRenderer', ), 'DEFAULT_PARSER_CLASSES': ( 'rest_framework.parsers.JSONParser', ), # 禁用 CSRF 保护 'DEFAULT_AUTHENTICATION_CLASSES': ( # 其他身份验证类... ), 'DEFAULT_PERMISSION_CLASSES': ( # 其他权限类... ), } ``` 希望这些解决方法可以帮助到你!如果问题仍然存在,请提供更多的代码和错误信息,以便我能够更好地帮助你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值