在本地开发服务器上,我有一个用于网站的 Apache conf,如下所示
<VirtualHost *:80>
ServerAdmin no-reply@localhost
ServerName sandbox.mysite.internal
DocumentRoot /var/www/vhosts/sandbox/mysite
ErrorLog logs/sandbox/mysite-error.log
CustomLog logs/sandbox/mysite-access.log common
</VirtualHost>
如果我访问以下地址(没有index.php或index.html)
http://sandbox.mysite.internal
我得到了 Apache CentOS 测试页面
如果我访问一个子目录,比如
http://sandbox.mysite.internal/test/
我收到403 Forbidden
错误。因此我在此处添加以下内容.htaccess
:
/var/www/vhosts/sandbox/mysite/test/.htaccess
内容:
Options +Indexes
现在当我访问时:
http://sandbox.mysite.internal/test/
我仍然收到 403 Forbidden。
我怎样才能使目录索引显示出来?
我一直认为.htaccess
指令会覆盖任何httpd.conf
指令。但我错了吗?我的某些设置是否httpd.conf
导致我的.htaccess
指令被忽略?
答案1
当然,AllowOverride None
这会阻止.htaccess
文件运行。但是,为什么要使用它们呢?Apache 的推荐.htaccess
除非您无法访问主配置,否则永远不要使用。
尝试一下这个:
<VirtualHost *:80>
ServerAdmin no-reply@localhost
ServerName sandbox.mysite.internal
DocumentRoot /var/www/vhosts/sandbox/mysite
ErrorLog logs/sandbox/mysite-error.log
CustomLog logs/sandbox/mysite-access.log common
<Directory /var/www/vhosts/sandbox/mysite/test/>
Order allow,deny
Allow from all
Options +Indexes
</Directory>
</VirtualHost>
如果这不起作用,请查看 Apache 的错误日志;例如,您的文件/目录权限可能有问题。
答案2
如果您的父目录 .htaccess(或您的 Apache 配置文件 httpd.conf)默认禁止目录访问(应该如此),则您必须在 .htaccess 文件中添加“Require all granted”指令,以便提供目录列表。否则,访问者将看到 403(禁止访问)错误。
为了确保安全,请确保您的目录及其文件允许读取但禁止写入(除非您确实希望用户能够更改或存储服务器上的文件)。此建议假设您的服务器在 Linux 上运行,它具有可见权限功能。Windows 服务器可能需要更高级的安全预防措施。