5

.htaccess を使用して特定の URL をパスワードで保護しようとしています。異なる URL は同じファイルを指していますが、動作は異なります。1 つの 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 エンジンを使用する必要がありました。私は、追加のファイルやディレクトリを作成する必要のない解決策を見つけることにしました。

同じファイル、追加のディレクトリなし、1 つの .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 に答える