首页 文章

使用Apache在别名目录上修复403 Forbidden

提问于
浏览
30

我正在尝试设置别名以指向我的文件系统上的某个目录而不是DocumentRoot . 现在我收到403 Forbidden回复 . 以下是采取的步骤:1 . 编辑http.conf,添加:

Alias /example "/Users/user/Documents/example"

然后...

<Directory "/Users/user/Documents/example">
   Options Indexes FollowSymLinks MultiViews
   AllowOverride None
   Order allow,deny
   Allow from all</Directory>

2.在终端中使用chmod设置权限:

chmod 755 /Users/user/Documents/example

现在它应该工作?相反,我获得禁止访问 . 这是error_log的输出:

[Sun Jul 24 06:57:57 2011] [error] [client xx.xx.xx.xx] (13)Permission denied: access to /example denied

11 回答

  • 25

    我也在OS X上遇到过这个问题 . 事实证明gliptak是对的,但我还有一些细节需要补充 .

    我们都试图为用户主文件夹下的文件夹配置虚拟目录;我想这就是我们遇到问题的原因 . 就我而言,我有以下设置:

    • 主文件夹是 /Users/calrion .

    • 虚拟目录文件夹是 /Users/calrion/Path/to/www .

    • 有一个指向 /Volumes/Other/Users/calrion/Path 的符号链接 /Users/calrion/Path .

    问题是用户和组 _www (Apache在OS X上运行)缺少对 /Users/calrion/Volumes/Other/Users/calrion 的执行访问权限 .

    运行 chmod o+x /Users/calrionchmod o+x /Volumes/Other/Users/calrion 解决了该问题(在OS X 10.7.4上) .

    这里的规则是 Apache requires execute access to all folders in the path 以便提供文件 . 没有这个,你将获得HTTP 403(禁止) .

  • 0

    最后一根稻草;)目录条目中必需的本地...

    喜欢

    <Directory "/Users/user/Documents/example">
       Options Indexes FollowSymLinks MultiViews
       AllowOverride All
       Require local
       Order allow,deny
       Allow from all
    </Directory>
    

    如果其他一切都不起作用(正确的别名,httpd.conf中的目录条目和正确的mod / usr / grp) .

    请记住:如果您将站点放在用户空间中,则apache用户(运行httpd)需要访问您的家!

  • 0

    检查 /Users/user/Documents//Users/user/ 的权限(首先强制执行更高级别的权限...)

    /bin/su 进入运行Apache的用户(如www,www-data)和 cat /Users/user/Documents/example 目录中的文件 . 这可能会指向您的设置权限问题 .

  • 3

    这些都是非常好的答案 . 他们都没有为我工作 .

    我在OSX服务器中指定了一个指向用户目录的别名 . 我花了很长时间chmodding并弄乱了_www用户,递归地添加了可执行权限,卸载了macports以及各种尝试使其工作的东西 . 我试过777.不 . 不知道为什么它不起作用 .

    最终,在该文件夹的Finder中 I just checked the "shared folder" checkbox ,并且它在指定的域上工作,使用php激活,就像我想要的那样 . :/ ...这很容易 .

  • 9

    我只是遇到了同样的问题 . 我发现SE_Linux已启用,并且我的别名目录中的文件的安全上下文不正确,缺少httpd_sys_content_t .

    您可以使用 ls -Z 查看安全上下文 . 如果您的文件/文件夹没有为它们提供服务!您可以使用 chcon -R --type=httpd_sys_content_t /new_html_directory 之类的内容添加适当的上下文 . 这将更改当前目录中文件的上下文,但不会更改之后添加的任何文件(为此您需要使用semanage) . 您的另一个选择是将文件保留在/ var / www下 .

  • 9

    这是为我修复它的原因:

    /etc/apache2/httpd.conf

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    
        # REMOVE THESE LINES
        #Order deny,allow
        #Deny from all
    
        # ADD THIS LINE
        Require all denied
    </Directory>
    

    此更改实现了apache update from 2.2 to 2.4中所做的更改 . OSX Yosemite更新带来了apache更新(PSA:如果你打算升级到优胜美地,请自己预算一周来解决它所破坏的一切) .

    奇怪的是,我已经让apache 2.4工作了,然后突然再次破坏....

    PSA:如果你打算升级到优胜美地,那么就要花一周的时间来解决它所破坏的一切

  • 13

    经过大量的时间浪费我修复了问题,我想分享以节省您的时间 .

    上面和其他帖子上的所有gentelmen在他们的答案中都有一些正确的部分,但下面是总和

    在“/etc/apache2/httpd.conf”文件中:

    1-更改您的文档根目录

    Original: DocumentRoot "/Library/WebServer/Documents"
    Change to: DocumentRoot "/Users/yourname/www"
    

    2-改变

    原版的:

    <Directory />
        Options FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
    </Directory>
    

    改成:

    <Directory /Users/yourname/www>
        Options FollowSymLinks Includes ExecCGI
        AllowOverride None
        Order deny,allow
        Deny from all
    </Directory>
    

    3-变化:

    原版的:

    <Directory "/Library/WebServer/Documents">
    

    改成:

    <Directory "/Users/yourname/www">
    

    4-最后,如果您是超级用户,则可能不需要此步骤,这是在新的根文件夹上设置正确的权限

    chmod 755 /Users/yourname/www
    

    希望这会有所帮助

  • 0

    它确实看起来正确,做一个健全检查 .

    • 你重启了apache

    • 检查组和用户所有权

    • 我认为报价可以删除

    • / Users / user / Documents / example中有什么内容?

    • 尝试777

    -Sean

  • 6

    SELinux是我的罪魁祸首 . 如果你在Linux机箱上遇到这个问题而你的别名和文件权限是正确的,那么尝试执行“setenforce 0”将SELinux置于许可模式 . 这对我有用 .

  • 0

    我不得不还原我的apache配置文件,然后设置再次启动服务器 . 发现这很有用:https://apple.stackexchange.com/questions/41143/how-to-revert-default-mac-apache-install-to-original

  • 4

    快速解决方案

    在Linux上以root身份使用这些命令:

    find /var/www -type d -exec chmod 755 {} \;
    find /var/www -type f -exec chmod 644 {} \;
    

相关问题