如何在特定路由上绕过 htpasswd 身份验证
How to bypass htpasswd auth on a specific route
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$"
我不确定应该如何计算表达式。我想我有一个语法错误。
第二种方法:
正如我在 上看到的那样,我尝试设置一个环境变量
## 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 客户端 POST 时,这导致了 401 错误 Authentication Required。
需要身份验证!
此服务器无法验证您是否有权访问
URL
“/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 ^(.*)/$ / [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
</IfModule>
我不太明白为什么,但我的网站上似乎有重定向。这是修复添加另一个允许指令:
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
解决了问题
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$"
我不确定应该如何计算表达式。我想我有一个语法错误。
第二种方法:
正如我在
## 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 客户端 POST 时,这导致了 401 错误 Authentication Required。
需要身份验证!
此服务器无法验证您是否有权访问 URL “/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 ^(.*)/$ / [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
</IfModule>
我不太明白为什么,但我的网站上似乎有重定向。这是修复添加另一个允许指令:
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
解决了问题