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

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

我已经编写了一个重写规则来将所有内容重定向到子目录(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]

【问题讨论】:

    标签: apache .htaccess url


    【解决方案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 文件夹。
    猜你喜欢
    • 1970-01-01
    • 2013-09-12
    • 2012-08-02
    • 2012-09-18
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    相关资源
    最近更新 更多