如果没有index.php而不是显示目录列表,则重定向

时间:2012-03-17 08:41:52

标签: php .htaccess

目前,当您访问我网站的子文件夹时,它会显示目录列表。这真的很可怕,因为它包含带有敏感信息的php类。现在,我通过在我的根.htaccess文件中使用“IndexIgnore *”来成功删除目录列表。部分通过显示空白目录列表来工作。但是,如果可能的话,我希望能够做到以下两种中的一种:

  1. 重定向到上面的文件夹,如果该文件夹不包含index.php,则上升到另一个级别。方便用于http://www.duaworld.com/resources/images/about

  2. 等文件夹
  3. 如果无法做到这一点,只需重定向到网站的根目录

  4. 我查看了以下问题,但只有在出现403错误消息时才有效。就我而言,它显示一个空白目录,没有错误。

    How to redirect or show a page rather than "Forbidden" when i have directory listings off (htaccess/unix)

    非常感谢帮助人员。

3 个答案:

答案 0 :(得分:1)

对于您的请求可能是best solution

由于

答案 1 :(得分:1)

首先,检查Apache Options documentation,尤其是:

Options -Indexes

比你有几个选择,做什么,例如:

“Zend way”

是这样的目录:

  • public/这里只有index.php和css,js,images ...
  • library/这里是所有应用程序

并设置:

DocumentRoot .../public/

所以私人​​内容从不会在浏览器中显示

拒绝

你又有这样的结构:

  • public_html - 托管您网络的根目录,index.php到此处
  • public_html/library - 私人图书馆

如果您有DocumentRoot .../public_html,则可以创建.htaccess这样的文件:

Allow from none
Deny from all
Order allow,deny

“PhpBB方式”

至少我记得它是phpBB的一部分

使用上下文创建index.html(或index.php或两者):

<h1>Hacker attempt!</h1>

结论

我肯定会选择“Zend way”(即使你控制了你的网络服务器,你可能会意外地允许Indexes)。

如果你不能(例如糟糕的托管配置或你没有使用依赖注入和手动包含文件)并且你必须在公共目录(ab)中有敏感数据,用户也可能总是正确地猜测文件名,所以你应该添加对每个敏感文件(php)都是这样的:

if( !defined( 'IN_APPLICATION')){
    die('Hacker attempt!');
}

同时使用提到的.htaccessDeny from all,只是为了防止错误配置将index.html添加到每个目录。

如果您需要将私人文件保存在公共html目录中,只是因为您的应用程序中有许多固定路径(设计很差),您可以执行符号链接:

.../public_html/library -> .../private

并添加:

Options -FollowSymlinks

答案 2 :(得分:0)

有几种方法......其中一种方法是使用.htaccess,或者如果你想从PHP中获取它,只需像这样创建 index.php 脚本

<?php header('Location: ../'); ?>

并将其放入除root之外的每个(子)目录中。

这会将所有目录请求重定向到主页(实际上是上级目录)。

(我不再使用这个解决方案了,但在我找到.htaccess之前我就这样做了)