繁体   English   中英

.htaccess。 拒绝根,允许特定的子文件夹。 可能的?

[英].htaccess. deny root, allow specific subfolder. Possible?

我怎样才能拒绝访问http://sub.mydomain.com/ ,但允许(完全) http://sub.mydomain.com/test (或http://sub.domain.com/test/test/

http://sub.mydomain.com/test/后面有一个 magento 后端

.htaccess 指令 适用于该目录及其所有子目录,因此您应该禁止访问 DocumentRoot,

http://sub.mydomain.com/.htaccess

Order deny,allow
Deny from all

并在您希望允许访问的任何特定子目录中覆盖它,

http://sub.mydomain.com/test/.htaccess

Order allow,deny
Allow from all

根目录下的.htaccess怎么样,有以下几行?

RewriteEngine On
# check if request is for subdomain
RewriteCond %{HTTP_HOST} ^sub.mydomain.com$ [NC]
# check if  'test' isnt part of request
RewriteCond %{REQUEST_URI} !^/test/?(.*)$ [NC]
# if subdomain and no 'test' part, redirect to main domain...
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [R,L]

因此,如果存在 '/test/' 部分,则不会发生重定向...

我知道这是一个非常古老的线程,但我一直在为这个场景苦苦挣扎好几天,终于让它工作了,因此我想我会分享我的解决方案以供进一步参考。

从 Apache 2.4 版开始(我猜),可以使用指令<RequireAll><RequireAny> 这可用于允许访问特定的子文件夹。

我的 .htaccess 解决方案(灵感来自本网站: https : //www.the-art-of-web.com/system/apache-authorization/ ):

SetEnvIf REQUEST_URI "^/test/.*" PUBLICACCESS
# Use for multiple subfolders:
# SetEnvIf REQUEST_URI "^/(?:test|test2|test3|test4)/.*" PUBLICACCESS
<RequireAny>
    <RequireAll>
        # Public access
        Require env PUBLICACCESS
        Require all granted
    </RequireAll>
    <RequireAll>
        # Require user and password
        AuthType Basic
        AuthName "Secured"
        AuthUserFile /var/www/example.com/.htpasswd
        Require valid-user
    </RequireAll>
</RequireAny>

我正在使用 cpanel 供电的服务器,它将添加如下所示的 .htaccess 条目:

#----------------------------------------------------------------cp:ppd
# Section managed by cPanel: Password Protected Directories     -cp:ppd
# - Do not edit this section of the htaccess file!              -cp:ppd
#----------------------------------------------------------------cp:ppd
AuthType Basic
AuthName "Protected"
AuthUserFile "/home/****/.htpasswds/sites/****/passwd"
Require valid-user
#----------------------------------------------------------------cp:ppd
# End section managed by cPanel: Password Protected Directories -cp:ppd
#----------------------------------------------------------------cp:ppd

我想允许访问特定的子文件夹,解决方案是在该子文件夹中创建一个 .htaccess 文件并将以下内容放入其中:

Satisfy any

尝试在 sub.mydomain.com 中创建 .htaccess 文件作为拒绝,并在 sub.mydomain.com/test 中创建允许。

或者您可以从http://sub.mydomain.com/重定向以拒绝 subdir。

如果您已通过 Auth 保护您的 DocumentRoot,那么您可以通过以下方式允许您的子文件夹:

http://sub.mydomain.com/test/.htaccess

require all granted
Order allow,deny
Allow from all

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM