[英]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 *: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.