我有一个正在生产的网站,我想修改它(从法语翻译成英语)。修改后的部分将放置在domain.com/en
URL 位置中,我希望在修改期间仅使用基本 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>