5

我正在尝试使用 .htaccess 对特定 url 进行密码保护。不同的 url 指向相同的文件,但有不同的工作方式。我现在只需要密码保护一个网址。我正在尝试使用 setenvif 执行此操作,但它似乎不起作用。我可能不完全理解 apache setenv 模块的目的或用途。

这是我的代码似乎不起作用

SetEnvIfNoCase Host "topasswordprotect\.domain\.com$" protecturl
<IfDefine protecturl>
  Require valid-user
  AuthName "Please enter your name and password"
  AuthType Basic
  AuthUserFile .htpasswd
</IfDefine>
4

3 回答 3

4

我终于弄明白了。我确实不得不使用 mod_rewrite 引擎。我决心有一个不涉及我必须制作额外文件或目录的解决方案。

相同的文件,没有额外的目录,一个 .htaccess:

# Case we are in the protected area!
RewriteCond %{REQUEST_FILENAME} index.php [OR]
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_URI} ^(\/){1}$
RewriteCond %{REQUEST_FILENAME} !-d [OR]
RewriteCond %{REQUEST_URI} ^(\/){1}$
RewriteCond %{HTTP_HOST} ^(protected)\.mydomain\.com$
RewriteRule ^(.*)$ admin.php%{REQUEST_URI} [L]

#default rewrite
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

#only protect access to admin.php which is a symlink to index.php
<FilesMatch "admin.php">
  AuthUserFile .htpasswd
  AuthName EnterPassword
  AuthType Basic
  require valid-user
</FilesMatch>
于 2011-03-11T01:12:52.340 回答
3

好吧,这实际上可以在没有 mod_rewrite 和SetEnvIf. 我需要它用于开发站点来测试 Facebook OpenGraph 标签的工作方式。

# allow facebook external hit
SetEnvIf user-agent "facebookexternalhit/1.1" allowthis
# disallow some other stuff
SetEnvIfNoCase Host "topasswordprotect\.domain\.com$" !allowthis

AuthType Basic
AuthName "dev access"
AuthUserFile .htpasswd
Require valid-user

Allow from allowthis=1
Satisfy Any

IfDefine定义与环境变量不同的工作。

来自apache docs的引用:

parameter-name 参数是在服务器启动时通过 -Dparameter- 在 httpd 命令行上给出的定义。

于 2012-02-28T05:54:25.673 回答
0

可能无法直接直接使用,但您能否拥有另一个受密码保护的目录,该目录将原始目录链接到其中?您可以使用mod_rewrite将匹配的请求重定向到受密码保护的目录。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.myhost.tld$
RewriteRule ^/foo/(.*)$ /bar/linkeddir/$1
于 2011-03-09T21:43:23.597 回答