【问题标题】:RewriteRule / HTTP auth for one url一个 url 的 RewriteRule / HTTP auth
【发布时间】:2014-01-29 16:54:46
【问题描述】:
我想将 "?p_id=62" 重定向到 http 身份验证,但它不起作用。
我的会议:
<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>
谁能帮忙?
【问题讨论】:
标签:
apache
.htaccess
http
url-rewriting
vhosts
【解决方案1】:
您不需要匹配查询字符串的? 部分:
RewriteCond %{QUERY_STRING} !^p_id=62$
RewriteRule ^ - [E=NO_AUTH:1,L]
但是,这行不通。 mod_auth 模块在应用mod_rewrite 之前 被应用,因此当重写规则检查查询字符串以设置环境变量时,mod_auth 已经将请求标记为401(需要验证)。您可能不得不接受脚本解决方案,例如:
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 处的内容并将其返回给浏览器(而不是重定向)。