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

时间:2011-07-24 14:12:56

标签: apache macos permissions operating-system alias

我正在尝试设置别名以指向我的文件系统上的某个目录而不是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 个答案:

答案 0 :(得分:26)

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

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

  • 主文件夹为/Users/calrion
  • 虚拟目录文件夹为/Users/calrion/Path/to/www
  • 指向/Users/calrion/Path的符号链接/Volumes/Other/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要求对路径中的所有文件夹执行访问权限才能提供文件。如果没有这个,你将得到一个HTTP 403(禁止)。

答案 1 :(得分:13)

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

<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)需要访问您的家庭!

答案 2 :(得分:10)

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

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

最后,我刚刚在Finder中检查了该文件夹中的“共享文件夹”复选框,并且在指定的域上,它以php活动的方式工作,就像我想要的那样。 :/ ......这很容易。

答案 3 :(得分:9)

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

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

答案 4 :(得分:6)

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

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

答案 5 :(得分:4)

以下是为我解决的问题:

/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:如果您正计划升级到Yosemite,请自行预算一周来修复它所破坏的一切)。

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

PSA:如果您计划升级到Yosemite,请花一周时间自行解决所有问题

答案 6 :(得分:3)

经过大量时间浪费我解决了问题,我想分享以节省您的时间。

上面和其他帖子上的所有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

希望这会有所帮助

答案 7 :(得分:0)

当然看起来确实正确,做一次健全检查。

  • 你重启了apache

  • 检查群组和用户所有权

  • 我认为可以删除引号

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

  • 尝试777

-Sean

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

快速解决方案:

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

import { Component } from '@angular/core';
import { Person } from "../model/peopleModel";
import { PeopleService } from "../services/app.peopleListService";

@Component({
  selector: 'app-people-list',
  templateUrl: './peoplelist/app.peopleList.html'
})
export class PeopleListComponent {
  people: Person[] = [];
  selectedPerson: Person;

  constructor(peopleService : PeopleService){
    this.people = peopleService.getAll();
  }

  personSelect(person : Person)
  {
    this.selectedPerson = person;
  }
}