在 Apache 中在基本身份验证和 openidc 之间重定向传入的 URL 请求

在 Apache 中在基本身份验证和 openidc 之间重定向传入的 URL 请求

在基本身份验证和 openidc 之间重定向传入的 URL 请求。我想对 URL 请求进行分类,如果 URL 请求来自“wget/curl”,那么我需要使用基本身份验证对其进行身份验证,如果用户输入来自浏览器,那么我需要重定向到 openidc。

Apache 新手,正在学习,尝试了下面的方法,但创建 Rewriterule 时卡住了

ServerName www.domain.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/Domain

<if %{QUERY_STRING} = 'wget'>
    <Directory /var/www/wget-curl>
            RewriteEngine On
            RewriteCond "%{QUERY_STRING}" "wget"
            Rewriterule
    AuthType Basic
                AuthName " Wiki Basic Credentials"
                AuthBasicProvider file
                AuthUserFile /etc/apache2/.htpasswd
                Require valid-user
            </Directory>
</if>

<Else "%{HTTPS} == 'on'">
        <Directory /var/www/openidc>
                Options +FollowSymLinks +Indexes
    IndexOptions FancyIndexing HTMLTable
                AuthType openid-connect
                Require valid-user
    AllowOverride all
    </Directory>
</Else>

答案1

我认为你测试错了。%{QUERY_STRING}是 URL 中 之后的部分?。用户的浏览器在 User-Agent 标头中指定。你可以像这样测试它:

<If "%{HTTP_USER_AGENT} =~ /wget|curl/">
...
</If>

表达式. 还有浏览器匹配,它允许您根据 User-Agent 标头的值设置环境变量。

请注意,客户端可以自由地将 User-Agent 标头设置为其想要的任何值,因此请确保您的安全性不依赖于该值。

此外,您的配置根据浏览器在不同的目录中设置指令,但不会将这些目录用于响应请求。您可能还需要DocumentRoot在每个部分中进行设置。

相关内容