如何在特定路由上绕过htpasswd身份验证

时间:2019-02-15 15:32:01

标签: apache .htaccess .htpasswd

mi网站具有apache授权,但我需要允许访问某些url请求。此url请求不代表现有文件或目录。

这是我的.htaccess:

首先,我尝试了这种方法:

AuthName "Required login"
AuthType Basic
AuthUserFile C:\path\to\apache\.htpasswd
Require expr %{REQUEST_URI} =~ ^specialUrl$
Require valid-user

这给我一个内部服务器错误500

我尝试过:

%{REQUEST_URI} == ^specialUrl$
"%{REQUEST_URI} =~ ^specialUrl$"

我不确定表达式应该如何计算。我想我有语法错误。

第二种方法:

我在this other answer上看到过,我尝试设置环境变量

## Grant access to webhook uri
SetEnvIf Request_URI ^/specialUri noauth=1

## Auth config
AuthName "Required login"
AuthType Basic
AuthUserFile C:\path\to\apache\.htpasswd
Require valid-user

## Allow Deny
Order Deny,Allow
Satisfy any
Deny from all
Allow from env=noauth

当我从http客户端发帖时,这会导致401错误,要求身份验证。

需要身份验证!

    该服务器无法验证您是否有权访问     网址     “ / specialUri”。     您提供的凭据错误(例如密码错误),或者     浏览器不了解如何提供所需的凭据。

    如果允许您索取文件,请     检查您的用户名和密码,然后重试。

.htaccess文件:

## Grant access to webhook uri
SetEnvIf Request_URI "\specialUri" noauth

## Auth config
AuthName "Required login"
AuthType Basic
AuthUserFile C:\path\to\.htpasswd

## Allow Deny
Order Deny,Allow
Satisfy any
Deny from all
Require valid-user
Allow from env=noauth


<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    RewriteCond %{HTTP:Authorization} ^(.*)
    RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
</IfModule>

1 个答案:

答案 0 :(得分:0)

我不太清楚为什么,但是似乎我的网站上存在重定向。这是固定的,添加了另一个allow指令:

AuthType Basic
AuthName "Required login"
AuthUserFile C:\path\to\.htpasswd
Require valid-user
SetEnvIf Request_URI "mySpecialUri$" allow
Order deny,allow
Deny from all
Allow from env=webhook
Allow from env=REDIRECT_noauth
Allow from 127.0.0.1
Satisfy any

请注意,SetEnvIf Request_URI "mySpecialUri$"正在使用uri的最新部分。这是因为我提到的重定向生成了更长的uri。

Allow from env=REDIRECT_noauth解决了这个问题