我想用 .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