pyr*_*yro 9 apache mod-rewrite basic-authentication
我在前端有一个apache,通过重写规则重定向请求.我必须在重定向请求之前进行基本身份验证,所以我把它放在配置文件中:
<VirtualHost *:443>
ServerAdmin xxxxxx
DocumentRoot /var/www/html/
ServerName xxxxxxx
RewriteEngine on
ErrorLog logs/error.log
CustomLog logs/access_log common
<Directory /var/www/html/>
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/httpd/conf/tag.pwd
Require valid-user
RewriteRule ^/(.*) http://xxxxxx:xxx/$1 [P,L]
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
但是不起作用.
有什么建议?
Tra*_*son 10
通常,Apache在授权阶段之前执行重写阶段,这就是为什么您的代码执行重写而不要求用户进行身份验证的原因.
你可以用LA-U:REMOTE_USER变量解决这个问题.在RewriteRule前面加上一个向前看("LA")到授权阶段的条件:
RewriteCond %{LA-U:REMOTE_USER} !^$
RewriteRule ^/(.*) http://xxxxxx:xxx/$1 [L]
Run Code Online (Sandbox Code Playgroud)
请参阅http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond中的相关说明
正如其他海报所指出的那样,将RewriteRule指令从块中取出也更好,因此它们更可靠.
我解决了将重写条件和重写规则放在Locatio指令之外的问题:
<Location />
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/httpd/conf/tag.pwd
Require valid-user
</Location>
RewriteCond %{LA-U:REMOTE_USER} !^$
RewriteRule ^/(.*) http://xxxxxx:xxx/$1 [P,L]
Run Code Online (Sandbox Code Playgroud)
非常感谢h0tw1r3的建议
*请记住,Location指令对URL而不是目录进行操作.这意味着如果有人为文档根创建别名,他们将完全绕过这些身份验证规则.(有关更多信息,请参阅http://httpd.apache.org/docs/2.0/mod/core.html#location.)
| 归档时间: |
|
| 查看次数: |
21824 次 |
| 最近记录: |