【问题标题】:htaccess block access to directory but allow access to fileshtaccess 阻止访问目录但允许访问文件
【发布时间】:2011-09-26 13:44:58
【问题描述】:

我有这样的情况。 我正在 Zend Framework 中开发应用程序,并且 htaccess 将每个请求指向 索引.php。如果请求路径上存在某些文件或目录,则 htaccess 允许访问这些文件,如 css、js、图像等...

现在我有例如这样的链接:

example.com/profile/martin-slicker-i231

使用 Zend Router,它指向控制器帐户和操作视图配置文件。我想为我的用户添加一些头像,并在公用文件夹中创建了目录(因此服务器可以像 css 和 js 一样访问图像)。该目录名为“profile”,其中的子目录为“martin-slicker-i231”。服务器可以看到所有路径:

public/
  .htaccess
  index.php
  profile/
    martin-slicker-i231/
      avatar-small.jpg

问题是当我将浏览器指向 example.com/profile/martin-slicker-i231 时 将我指向此目录而不是控制器和操作。当我使用用户删除文件夹时,流程将转到控制器和操作。如何配置 .htaccess 以便 example.com/profile/martin-slicker-i231 将指向控制器和操作,但请求 example.com/profile/martin-slicker-i231/ avatar-small.jpg 指向文件。这是我的 .htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

有人可以帮忙吗?

【问题讨论】:

  • @Marcin - 看起来下面的答案对你有所帮助......也许你应该接受它是正确的??

标签: php zend-framework .htaccess apache2 directory


【解决方案1】:

根据 Apache 文档,以下内容将关闭目录列表

<Directory /path/to/directory>
   Options -Indexes
</Directory>

您可能还想查看 mod_autoindex 的文档

【讨论】:

  • 这给了我 500 内部服务器错误。我只更改了目录的路径
【解决方案2】:

只需删除说它应该为目录提供服务的部分:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l 
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

现在它将直接提供文件(大小 > 0)和符号链接,但将目录引用和其他 url 发送到您的应用程序

【讨论】:

  • 是的!!!非常感谢您。有用。我还注意到,当我仅使用此条件时: RewriteCond %{REQUEST_FILENAME} -f 它也有效。我不知道哪种方式更好,但谢谢你。服务目录的部分在原始 Zend Framework .htaccess 文件中,所以我希望这不会破坏任何东西。
  • 既然这是正确答案,您应该通过勾选它旁边的复选标记来真正接受它。
  • 不知道为什么您没有为此获得积分或接受。它对我帮助很大...+1
猜你喜欢
  • 1970-01-01
  • 2021-06-17
  • 2011-09-16
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
  • 2016-10-24
  • 2019-03-03
  • 2016-05-02
相关资源
最近更新 更多