特定 URL 的 Apache 基本身份验证

特定 URL 的 Apache 基本身份验证

我有一个正在生产的网站,我想修改它(从法语翻译成英语)。修改后的部分将放置在domain.com/enURL 位置中,我希望在修改期间仅使用基本 HTTP 身份验证保护此部分。

我希望获得与我en的 Web 根文件夹中有一个目录以及.htaccess此目录中的一个文件相同的行为,以实现基本身份验证。不幸的是,我无法做到这一点,因为该网站在 Wordpress 上运行并使用重写规则,因此我无法en在不绕过 Wordpress 的情况下创建目录。

我应该在根目录中放入哪些指令.htaccess才能仅为该/en位置启用基本身份验证?我尝试使用该<Location /en></Location>块,但它会产生 500 错误,因此我认为该块仅在 apache 配置文件中受支持。

答案1

我明白了......下面的代码将仅在回调目录上禁用身份验证,也许您可​​以修改这个逻辑,以便仅在所需的目录上启用身份验证,或者在所有名称与您想要保护的目录不匹配的目录上禁用身份验证。

# set an environment variable "noauth" if the request starts with "/callbacks/"
SetEnvIf Request_URI ^/callbacks/ noauth=1

# the auth block
AuthName "Please login."
AuthGroupFile /dev/null
AuthType Basic
AuthUserFile /xxx/.htpasswd

#Here is where we allow/deny
Order Deny,Allow
Satisfy any
Deny from all
Require valid-user
Allow from env=noauth

答案2

@Gregg_Leventhal 通过使用环境变量为我提供了解决方案。但我使用的逻辑与他的答案中使用的逻辑完全相反。为了完整起见,以下是仅对 URL 要求身份验证的代码/en

#set an environtment variable "auth" if the request starts with "/en"
SetEnvIf Request_URI ^/en auth=1

AuthName "Please login to access english part"
AuthType Basic
AuthUserFile "/path/to/my/.htpasswd"

# first, allow everybody
Order Allow,Deny
Satisfy any
Allow from all
Require valid-user
# then, deny only if required
Deny from env=auth

答案3

以上答案适用于 Apache 2.4 之前的版本。以下是针对 Apache 2.4 及以上版本的更新,一些指令被修改。在此配置文件摘录中,HTTP 基本身份验证仅适用于 URI“/members”。'joe' 指的是文件“/home/website/.htpasswd”中指定的用户。

<Directory "/home/website/www">
    AuthType Basic
    AuthName "Members' restricted area"
    AuthBasicProvider file
    AuthUserFile "/home/website/.htpasswd"

    <RequireAny>
        Require expr %{REQUEST_URI} !~ m#^\/members#
        Require user joe
    </RequireAny>
</Directory>

相关内容