我想用 .htaccess 禁用目录而不是子目录的访问

Posted

技术标签:

【中文标题】我想用 .htaccess 禁用目录而不是子目录的访问【英文标题】:I want to disable the access of a directory but not the child directory with .htaccess 【发布时间】:2012-07-17 16:40:35 【问题描述】:

我已经编写了一个重写规则来将所有内容重定向到子目录(public_html),但是如果用户知道 url,它的父级仍然可以访问,我想禁用当前目录而不是子目录的访问

# 打开重写。 重写引擎开启 # 仅适用于该域的 URL RewriteCond %HTTP_HOST ^(www.)?domain.com$ # 仅适用于不在文件夹下的 URL。 RewriteCond %REQUEST_URI !^/文件夹/ # 不适用于指向现有文件或文件夹的 URL。 RewriteCond %REQUEST_FILENAME !-f RewriteCond %REQUEST_FILENAME !-d # 重写所有这些以插入/文件夹。 重写规则 ^(.*)$ /folder/$1 # 同时重定向根文件夹。 RewriteCond %HTTP_HOST ^(www.)?domain.com$ RewriteRule ^(/)?$ 文件夹/index.php [L]

【问题讨论】:

【参考方案1】:

您必须在主服务器配置中使用两个 .htaccess 文件或两个目录部分(如果您的服务器允许 .htaccess 文件,第一个解决方案会更容易)。

在您的根目录中添加一个 .htaccess,其内容如下:

Allow from none
Deny from all

然后在你的public_html文件夹中放一个内容:

Allow from all

这样,您的根目录中将无法访问任何内容,但您的 public_html 会覆盖此内容,这样,所有内容都可以访问。

编辑:

您可以通过将此 .htacces 放在您的根目录中来完成您想要的:

RewriteEngine On

RewriteBase /

RewriteCond %REQUEST_URI !^/public_html/
RewriteRule ^(.*)$ public_html/$1

并将您的原始文件放入public_html 并对其进行修改以反映它现在位于public_html 文件夹中。我发布的这个配置负责跳过根目录,假装public_html 是根目录。

【讨论】:

我原来的重定向代码不能再工作了,我必须输入 www.domain.com/public_html/ 你能给我看看你的原始 .htacecss 吗?因为我认为,如果您不在根目录中为您的第一个 RewriteRule 提供条件,那么其中的任何内容都将无法访问。唯一的缺点是 /public_html/something URLs 仍然可以工作,你必须在你的 public_html 的 .htaccess 中使用条件重写,并在它们前面加上 RewriteBase /。这就是我用于 MVC 框架的方法。 我可以使用任何东西来隐藏 url 中的 public_html 目录路径吗? 我已经编辑了我的答案以提供一个解决方案,您可以在其中保留旧的 htaccess 配置,并完全重定向到 public_html 文件夹。

以上是关于我想用 .htaccess 禁用目录而不是子目录的访问的主要内容,如果未能解决你的问题,请参考以下文章

使用 .htaccess 在目录(包括所有子目录)中禁用 PHP

如何使用 .htaccess 而不是 VHost 将文档根目录设置为子目录

使用 .htaccess 将变量重写到目录

通过 htaccess 发送 404 错误?

htaccess 下载文件而不是加载

.htaccess 拒绝目录访问