繁体   English   中英

在AliasMatch上找不到DirectoryIndex

[英]DirectoryIndex not found on AliasMatch

文档我有这个:

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

它应该只匹配像../projects/project1这样的../projects/project1 ,而不是../projects/

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

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

我已经尝试在vhosts中明确添加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 - 一个目录。 Alias不同, AliasMatch不会将尾随路径复制到目标的末尾。

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

为了使按预期这项工作(要能访问“公共”目录中的所有文件,如: index.php ),那么你需要一个第二parenthesised子模式,是这样的:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM