拒绝访问 .htaccess 中的一个特定文件夹
Posted
技术标签:
【中文标题】拒绝访问 .htaccess 中的一个特定文件夹【英文标题】:Deny access to one specific folder in .htaccess 【发布时间】:2013-10-07 17:57:46 【问题描述】:我试图通过操纵 URL 来拒绝用户访问 site/includes
文件夹。
我不知道我是否必须拒绝所有内容并手动设置个别例外以允许,我是否可以拒绝这个文件夹,或者是否有可以使用的重写功能。
具体示例:我不想通过在 URL 中输入 localhost/site/includes
来查看目录文件。
【问题讨论】:
只是为了禁止列出目录在位于根文件夹的 .htaccess 文件中写入Options -Indexes
【参考方案1】:
创建site/includes/.htaccess
文件并添加这一行:
Deny from all
【讨论】:
嘿! anubhava 我已经使用它来禁用对 /api 文件夹中我的 api 文件的直接访问,但现在所有 web 服务调用都发送 403 禁止状态.. 我只想在有人从浏览器访问它时阻止访问。 对于网络服务器,浏览器和非浏览器之间的请求之间没有真正的区别。 我用的是 nginx,我不能用.htaccess
。那么,没有 .htaccess
怎么办?谢谢
Deny from all
不会给出 404 而是 403。您仍然可以使用 php/Perl 等访问文件/文件夹,但不能使用 Web 请求。如果没有回答您的问题,您可以打开一个新问题。
注意,如果你想使用这个,apache应该允许它。在站点配置<Directory>
中,您至少需要有AllowOverride Limit
。【参考方案2】:
您还可以使用RedirectMatch
拒绝对文件夹的访问
将以下行添加到 htaccess
RedirectMatch 403 ^/folder/?$
这将为文件夹返回 403 forbidden
错误,即:http://example.com/folder/
但它不会阻止访问该文件夹内的文件和文件夹,如果您想阻止文件夹内的所有内容,只需将正则表达式模式更改为 @987654325 @.
另一个选项是mod-rewrite
如果启用了url-rewrting-module
,您可以在root/.htaccss
中使用类似以下内容:
RewriteEngine on
RewriteRule ^folder/?$ - [F,L]
这将在内部将folder
的请求映射到forbidden
错误页面。
【讨论】:
使用 Apache 2.22 最好的解决方案是第一个:RedirectMatch..... 更喜欢这个答案,而不是在我需要拒绝访问的每个目录中创建多个.htaccess
文件。
这是一个比标记为正确的答案更好的答案,认真【参考方案3】:
在您需要使用的.htaccess
文件中
Deny from all
将其放入site/includes/.htaccess
以使其特定于includes
目录
如果您只想禁止列出可以使用的目录文件
Options -Indexes
【讨论】:
这是递归的吗? @Abdillah 是的 如果我只是将Options -Indexes
添加到页面底部,我会收到“内部服务器错误500”吗? @OliverMGrech
检查您的 htaccess 中是否有其他任何内容导致服务器错误。 Apache 的错误日志文件可能会告诉您缺少什么或出了什么问题【参考方案4】:
我们会将目录设置为非常安全,拒绝所有文件类型的访问。下面是您要插入到 .htaccess 文件中的代码。
Order Allow,Deny
Deny from all
既然我们现在已经设置了安全性,我们现在想要允许访问我们想要的文件类型。为此,请将以下代码添加到您刚刚插入的安全代码下的 .htaccess 文件中。
<FilesMatch "\.(jpg|gif|png|php)$">
Order Deny,Allow
Allow from all
</FilesMatch>
您的最终.htaccess
文件将如下所示
Order Allow,Deny
Deny from all
<FilesMatch "\.(jpg|gif|png|php)$">
Order Deny,Allow
Allow from all
</FilesMatch>
来源Allow access to specific file types in a protected directory
【讨论】:
这个答案让我很头疼。像魅力一样工作。【参考方案5】:您可以为该文件夹创建一个 .htaccess 文件,应该拒绝访问
Deny from all
或者您可以重定向到自定义 404 页面
Redirect /includes/ 404.html
【讨论】:
【参考方案6】:只需将 .htaccess 放入您要限制的文件夹中
## no access to this folder
# Apache 2.4
<IfModule mod_authz_core.c>
Require all denied
</IfModule>
# Apache 2.2
<IfModule !mod_authz_core.c>
Order Allow,Deny
Deny from all
</IfModule>
来源:MantisBT 来源。
【讨论】:
【参考方案7】:创建 index.php、index.html、index.htm 是不安全的。因为,任何人都可以通过猜测文件名来访问指定目录中的文件。例如:http://yoursite.com/includes/file.dat 因此,推荐的方法是创建一个 .htaccess 文件来拒绝所有访问者;)。玩得开心!!
【讨论】:
【参考方案8】:您也可以将此IndexIgnore *
放在您的根 .htaccess 文件中,以禁用所有网站目录(包括子目录)的文件列表
【讨论】:
这不会禁用文件列表,但会告诉自动索引器在构建索引时忽略所有文件。要禁用文件列表,您可以使用Options -Indexes
。【参考方案9】:
您可以通过这种方式动态执行此操作:
mkdir($dirname);
@touch($dirname . "/.htaccess");
$f = fopen($dirname . "/.htaccess", "w");
fwrite($f, "deny from all");
fclose($f);
【讨论】:
【参考方案10】:在 Apache 2.4 上,您可以在根 .htaccess
文件中使用 Apache <If>
表达式来阻止直接访问此特定子目录及其中的所有内容。
例如:
<If "%REQUEST_URI =~ m#^/site/includes($|/)#">
Require all denied
</If>
【讨论】:
这是我一直在寻找的【参考方案11】:由于某些我不明白的原因,创建文件夹/.htaccess 并添加“全部拒绝”对我不起作用。我不知道为什么,它看起来很简单但没有用,而是将 RedirectMatch 403 ^/folder/.*$ 添加到根 htaccess 中。
【讨论】:
Apache 服务器必须配置为支持子目录中的本地 .htaccess 文件。如果不是,那么创建本地文件显然不会有任何效果。以上是关于拒绝访问 .htaccess 中的一个特定文件夹的主要内容,如果未能解决你的问题,请参考以下文章