我正在尝试编写一个 htaccess 文件来执行身份验证并将经过身份验证的用户重定向到授权目录。有人能帮我解释一下条件语法吗?

我正在尝试编写一个 htaccess 文件来执行身份验证并将经过身份验证的用户重定向到授权目录。有人能帮我解释一下条件语法吗?

这是我目前所拥有的,但我无法正确获取 RewriteCond 和 RewriteRule。

RewriteEngine On

RewriteCond %{LA-U:REMOTE_USER} (\d{3})$ 
RewriteRule !^%1 http://subdomain.mydomain.com/%1 [R,L].

AuthName "My Domain Protected Area"
AuthType Basic
AuthUserFile /path/to/my/.htpasswd
Require valid-user

我的意思是ReWriteCond and RewriteRule

“如果 REMOTE_USER 的用户名以 3 位数字结尾,则捕获匹配的三位数字,并且对于他们尝试访问的任何 URL,如果它不是以捕获的 3 位数字开头,则将其重定向到名称等于捕获的三位数字的子目录。”

换句话说,如果名为“johnny202”的用户已通过身份验证,那么如果他请求的是除http://subdomain.mydomain.com/202/那么他应该被重定向到http://subdomain.mydomain.com/202/

我能想到的唯一错误是‘%1’的第一个实例。

答案1

使用 mod_rewrite 时需要记住的一点是它符合规则查看条件,因此在检查规则模式时,它尚未运行任何条件,并且尚未设置 %1 反向引用。我会尝试将 URL 检查分为第二个条件 - 如下所示

RewriteCond %{REMOTE_USER} ([0-9]{3})$
RewriteCond %{REQUEST_URI} !^/%1
RewriteRule ^.*$ http://subdomain.mydomain.com/%1 [R,L].

这样,规则将匹配每个请求,因此始终会检查条件,但重定向只会在请求不以“正确”数字开头时发生。

注意:我在第一种情况下已经删除了 LA-U - 据我所知,如果它在 .htaccess 文件中,则不需要它(仅当重写在主 Apache 配置中时)。

相关内容