1

私の前の質問に関連する: .htaccess は最初に Cookie をチェックし、次に有効なユーザーをチェックします

こんにちは、ここの専門家からの助けに本当に感謝しています。私の httpd.conf は、mod_auth_mysql または Cookie を使用したユーザー ログインを要求する必要がありますが、現在はユーザー ログインのみをチェックしています。前の質問のコードは、現在 httpd.conf にあります。

機能しているもの:

現在、すべての /var/www/downloads およびユーザーのサブディレクトリ (/var/www/downloads/~username~) には、mod_auth_mysql を使用したユーザー名とパスワードが必要です。これは機能します。

機能していないもの:

問題は、mod_auth_mysql を使用したログイン (動作)またはCookie (動作しない) のいずれかを必要とする設定があることです。Cookie が存在する場合、ユーザーが /var/www/downloads/ にアクセスすると、ディレクトリの内容が自動的に表示されます。しかし、そうではありません。ユーザー名/パスワードを要求します。

私は SetEnvIf を使用していますが、「すべてを満たす」という誤った使用法を使用している可能性があります。httpd.conf と /sites-enabled/000-default の間で競合が発生する可能性があります。私はここにあるもののほとんどを経験していないので、どんな助けでも大歓迎です!

HTTPD.conf:

RewriteEngine on
RewriteLogLevel 9
RewriteLog /var/www/logs/rewrite.log

#Block IPs
<Directory /var/www>
    RewriteEngine On

    #only use my server for apache
    RewriteCond %{HTTP_HOST} !^2.2.2.2$ [NC]
    RewriteRule ^(.*)$ http://www.google.co.uk/$1 [L,R=301]

    RewriteCond %{REMOTE_ADDR} 0.0.0.0 [NC,OR]
    RewriteCond %{REMOTE_ADDR} 1.1.1.1 [NC]
    RewriteRule ^(.*)$ http://www.google.com [R]
</Directory>

# DOWNLOADS TOP DIRECTORY
<Directory /var/www/downloads>
    #Options Indexes
    #AllowOverride All
    #Order deny,allow
    #Deny from all
    #Allow from All

    AuthName "Please don't hack the server, thanks"
    AuthBasicAuthoritative Off
    AuthUserFile /dev/null
    AuthMySQL On
    AuthType Basic
    Auth_MYSQL on
    Auth_MySQL_Host localhost
    Auth_MySQL_User user
    Auth_MySQL_Password password
    AuthMySQL_DB db
    AuthMySQL_Password_Table users
    Auth_MySQL_Username_Field username
    Auth_MySQL_Password_Field password
    Auth_MySQL_Empty_Passwords Off
    Auth_MySQL_Encryption_Types Plaintext
    Auth_MySQL_Authoritative On
    require user luke

</Directory>

# EXAMPLE USERS DIRECTORY
# MIKE
<Directory /var/www/downloads/mike>
    SetEnvIf Cookie (.*)cookiename(.*) norequire_auth=yes
    Order Deny,Allow
    deny from all
    Satisfy Any

    #MYSQL AUTH
    AuthName "Please login"
    AuthBasicAuthoritative Off
    AuthUserFile /dev/null
    AuthMySQL On
    AuthType Basic
    Auth_MYSQL on
    Auth_MySQL_Host localhost
    Auth_MySQL_User user
    Auth_MySQL_Password password
    AuthMySQL_DB db
    AuthMySQL_Password_Table users
    Auth_MySQL_Username_Field username
    Auth_MySQL_Password_Field password
    Auth_MySQL_Empty_Passwords Off
    Auth_MySQL_Encryption_Types Plaintext
    Auth_MySQL_Authoritative On
    require user mike

    #COOKIE AUTH
    Allow from env=norequire_auth
</Directory>

場合によっては、sites-enabled/000-default:が競合を引き起こしている可能性がありますか? http://jsfiddle.net/Xcece/

私は .htaccess ファイルを使用していません。私は多くのディレクティブを変更しましたが、かなり迷子になりました。

私の人生では、なぜそれが機能しないのか理解できません-存在する可能性のある競合をよく理解していないので、将来これを回避できるように説明を付けて正しい方向に向けることは素晴らしいことです. ありがとうございました。

4

1 に答える 1

1

ついに!1週間の検索の後...

問題は、Cookie の設定にありました。ファイルが異なるディレクトリにあるということは、Cookie が httpd.conf によって正しく読み取られていないことを意味していました。これは実際には正しいことです

Cookie の 4 番目のパラメーターを「/downloads/mike」に設定する必要がありました。これにより、httpd.conf ファイルによって正しく読み取られるようになりました。

session_start();
setcookie("cookiename","cookiename",time() + 3600, '/downloads/mike');

Cookie を破棄するときtime()-xは、4 番目のパラメーターを使用して破棄することを覚えておいてください/downloads/mike

于 2012-11-22T11:41:52.027 に答える