2

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

1 回答 1

7

您必须在主服务器配置中使用两个 .htaccess 文件或两个 Directory 部分(如果您的服务器允许 .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根目录。

于 2012-07-18T15:39:57.440 回答