在所有传入 URL 上使用 Mod_rewrite 和身份验证

El *_*apo 7 mod-rewrite http-authentication apache-2.2

我需要确保我的网址(称为 www.domain.com)始终至少通过基本 HTTP 身份验证受到保护。此外,我想使用 mod_rewrite 将我的用户发送到我的服务器上运行的两个 OC4j 实例之一。我还想使用相同的身份验证保护我的 OC4j 管理面板(和其他管理类型的功能)。我将有 2 个用户,称他们为 admin(管理员可以访问 OC4j 实例和 OC4j 管理面板)和来宾(访客只能访问 OC4j 实例)。

所以,假设我有两个 OC4j 实例——instance_a 和 instance_b。instance_a 将在端口 8888 上运行,instance_b 将在端口 8889 上运行。当用户键入 www.domain.com/instance_a 时,我想首先确保它们已通过服务器的身份验证,然后我想使用 mod_rewrite 将请求代理到 www .domain.com:8888/instance_a。这将适用于 instance_b。同样,任何用户,管理员或访客,都可以访问这些实例。如果用户尝试直接进入 OC4j 管理面板,如果他们不是管理员用户,我想将他们踢出去。

我有一个看起来像这样的 VirtualHost 条目:

<VirtualHost *:80>
        ServerName www.domain.com
        CustomLog "/var/log/httpd/ic/access_log" "combined"
        ErrorLog "/var/log/httpd/ic/error_log"
        RewriteEngine on
        RewriteLogLevel 9
        RewriteLog "/var/log/httpd/rewrite_log"
        RewriteCond %{REMOTE_USER} !^guest$ [OR]
        RewriteCond %{REMOTE_USER} !^admin$
        RewriteCond %{REQUEST_URI} ^/instance_a.*$
        RewriteRule ^.*$ - [F,L]
        <LocationMatch "^/.*$">
                AuthType Basic
                AuthName "Please Login"
                AuthBasicProvider file
                AuthUserFile /usr/local/apache/passwd/passwords
                Require valid-user
        </LocationMatch>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

出于某种原因,这不起作用(不是让我感到惊讶)。似乎当我同时使用 Authentication 和 mod_rewrite 东西时,它们不能一起工作。

提前致谢。

Jor*_*nes 0

不确定这是否有帮助,但您可能希望将重写条件/规则从 LocationMatch 中取出,并将其放在 LocationMatch 之前/之后。