一个url的RewriteRule / HTTP auth

时间:2014-01-10 16:10:19

标签: apache .htaccess http url-rewriting vhosts

我想将“?p_id = 62”重定向到http authentification,但它不起作用。

我的conf:

<LocationMatch  ^/>
   RewriteCond %{QUERY_STRING} !^\?p_id=62$
   RewriteRule ^ - [E=NO_AUTH:1,L]
   Order deny,allow
   Deny from all
   AuthType basic
   AuthName "Auth Needed"
   AuthUserFile "/var/www/site/.htpasswd"
   Require valid-user
   Allow from env=NO_AUTH
   Satisfy Any
</LocationMatch>

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您无需匹配查询字符串的?部分:

RewriteCond %{QUERY_STRING} !^p_id=62$
RewriteRule ^ - [E=NO_AUTH:1,L]

但是,这不会起作用。在应用 mod_rewrite之前应用 mod_auth模块,因此当重写规则检查查询字符串以设置环境变量时,mod_auth已将请求标记为401(需要auth)。您可能不得不求助于脚本化解决方案,例如:

RewriteCond %{QUERY_STRING} !^\?p_id=62$
RewriteRule ^ /auth_script.php [L]

<Files "auth_script.php">
 Order deny,allow
 Deny from all
 AuthType basic
 AuthName "Auth Needed"
 AuthUserFile "/var/www/site/.htpasswd"
 Require valid-user
</Files>

并且auth_script.php只会在$_SERVER['REQUEST_URI'] URI处加载内容并将其返回到浏览器(而不是重定向)。