我有一个需要确保我的url,称为www.domain.com总是至less通过基本的HTTP身份validation保护。 此外,我想使用mod_rewrite将我的用户发送到我的服务器上运行的两个OC4j实例之一。 我也想用这个相同的authentication保护我的OC4jpipe理面板(和其他pipe理types的function)。 我将有2个用户,称他们pipe理员(pipe理员将有权访问OC4j实例和OC4jpipe理面板)和来宾(来宾将只能够到达OC4j实例)。
所以,假设我有两个OC4j实例 – instance_a和instance_b。 instance_a将在端口8888上运行,而instance_b将在端口8889上运行。当用户inputwww.domain.com/instance_a时,我想首先确认它们已经通过服务器authentication,然后我想使用mod_rewrite将请求代理到www .domain.com:8888 / instance_a。 这将遵循instance_b。 同样,任何用户,pipe理员或访客都可以访问这些实例。 如果用户试图直接访问OC4jpipe理面板,如果他们不是pipe理员用户,我想把它们踢出去。
我有一个像这样的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>
由于某种原因,这是行不通的(不是我感到惊讶)。 这似乎是当我同时使用authentication和mod_rewrite的东西,他们不一起工作。
提前致谢。
我相信configuration的问题是张贴的前两个RewriteCond行:
RewriteCond %{REMOTE_USER} !^guest$ [OR] RewriteCond %{REMOTE_USER} !^admin$
如果REMOTE_USER是'admin',则第一个testing成功,导致Forbidden响应。 “客人”的情况是相似的。 你可以尝试结合这两个testing:
RewriteCond %{REMOTE_USER} !^(guest|admin)$
如果REMOTE_USER是guest或admin, ^(guest|admin)$将匹配,导致整个RewriteCond失败。
不知道这是否有帮助,但是您可能希望将您的重写条件/规则从LocationMatch中提取出来,并将其放在LocationMatch之前/之后。
啊呀。
这是未经testing的,但可能是这样的:
<VirtualHost *:80> ServerName www.domain.com CustomLog "/var/log/httpd/ic/access_log" "combined" ErrorLog "/var/log/httpd/ic/error_log" RewriteEngine on RewriteRule ^(/instance_a/.*) http://localhost:8888/$1 [P] RewriteRule ^(/instance_b/.*) http://localhost:8889/$1 [P] <Proxy "http://localhost:888?/"> AuthType Basic AuthName "Please Login" AuthBasicProvider file AuthUserFile /usr/local/apache/passwd/passwords Require valid-user </Proxy> <Proxy "http://localhost:888?/instance_?/admin"> Require group admin </Proxy> </VirtualHost>
我不确定是否需要在每个Proxy块中复制auth指令 – 您必须进行试验。