这是我目前所拥有的,但我无法正确获取 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 配置中时)。