gpt4 book ai didi

regex - 在 AliasMatch 上找不到 DirectoryIndex

转载 作者:行者123 更新时间:2023-12-02 04:47:10 24 4
gpt4 key购买 nike

来自documentation我有这个:

AliasMatch "^/projects/(.+)" "/var/www/domain.name/$1/public"

它应该只匹配像 ../projects/project1 这样的 URL , 不是 ../projects/自己。

当我说,http://example.org/projects/project1/它返回 403 Forbidden .日志说因为:

No matching DirectoryIndex found, and server-generated directory index forbidden by Options directive .

我试过添加 DirectoryIndex明确在虚拟主机中但无济于事。我打开目录 ( /var/www/domain.name/project1/public ) 以供所有人阅读,现在它只显示我想要的文件夹的目录列表。我可以看到它转到了正确的文件夹并且可以看到 index.html 文件,但它并没有像它应该的那样自动获取它。


我的 VirtualHost 文件的摘要版本:

<VirtualHost *:443>
DocumentRoot /var/www/domain.name/www/public
ServerName www.domain.name

AliasMatch "^/projects/(.+)" "/var/www/domain.name/$1/public"

ErrorDocument 401 err.php
ErrorDocument 404 err.php
ErrorDocument 500 err.php

<Directory /var/www/domain.name>
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>

如果我随后将特定项目文件夹的权限设置为 755,我只会得到一个目录列表。我已将其改回 711。

/var/www/中的所有文件夹都归用户名:www-data 所有,权限为 711。

如果我对文件夹直接使用别名,即 Alias /projects/<actual-project-name> /var/www/domain.name/<project-name>/public它有效。

最佳答案

AliasMatch "^/projects/(.+)" "/var/www/domain.name/$1/public"

问题在于所有 请求都映射到一个 URL - 一个目录。 AliasMatch 不会将尾部路径复制到目标的末尾,这与 Alias 不同。

当您请求 /projects/project1 时,别名自然会将您映射到 /projects/public。 mod_dir (DirectorySlash) 附加一个尾部斜杠(因为这是一个有效的目录),但目录索引丢失了。目标文件实际上只是 /projects/public/(一个目录),如 AliasMatch 指令中所述,而不是 /projects/public/index.html 似乎是必需的。

为了使它按预期工作(以便能够访问“公共(public)”目录的所有文件,例如index.php),您需要第二个括号子模式,例如:

AliasMatch ^/projects/([^/]+)(.*) /var/www/domain.name/$1/public/$2

关于regex - 在 AliasMatch 上找不到 DirectoryIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31995429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com