特定 URL 的 Apache 基本身份验证

Fab*_*aux 7 authentication .htaccess apache-2.2

我有一个要修改的生产站点(从法语翻译成英语)。修改后的部分将放置在domain.com/enURL 位置,我想在修改期间只使用基本的 HTTP 身份验证来保护这部分。

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

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

Fab*_*aux 8

@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
Run Code Online (Sandbox Code Playgroud)


小智 4

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

# 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
Run Code Online (Sandbox Code Playgroud)