私はWordpressサイトで作業しており、私のページは、ディレクトリのように見えるようにmod_rewritesするパーマリンク構造を使用しています。いくつかのページでは、基本認証を使用していくつかのページをパスワードで保護したいと思います。これを.htaccessファイルに書き込むにはどうすればよいですか?ファイルを保護していますか、それとも書き換えられたアドレスを保護していますか?
3 に答える
これにはmod_rewriteは必要ありません。うまくいけば、これでうまくいくはずです。
SetEnvIfNoCase Request_URI ^/some/path/to/protect require_auth=true
SetEnvIfNoCase Request_URI ^/another/protected/path require_auth=true
# Auth stuff
AuthUserFile /var/www/htpasswd
AuthName "Password Protected"
AuthType Basic
# Setup a deny/allow
Order Deny,Allow
# Deny from everyone
Deny from all
# except if either of these are satisfied
Satisfy any
# 1. a valid authenticated user
Require valid-user
# or 2. the "require_auth" var is NOT set
Allow from env=!require_auth
mod_authモジュールとmod_envモジュールは、mod_rewriteよりも重要である必要があるため、偽のディレクトリ構造は同じままである必要があります。それぞれにaSetEnvIfNoCase Request_URI ^/some/path/to/protect require_auth=true
を入力してから、ニーズに合わせて残りの認証情報を入力する必要があります。
このソリューションで私が抱えている唯一の問題は、キャンセルボタンをクリックすると保護されたページが表示されることです。私はこれを使用してこれを解決しようとしました:
RewriteCond %{REMOTE_USER} !user
RewriteRule ^/protected-page /unauthenticated-page [R=401]
しかし、それはうまくいきませんでした。理由はわかりません。
問題をすばやく解決するために、私は追加しました
ErrorDocument 401 "You don't have access."
リダイレクトを作成するために私はこれを使用しました
ErrorDocument 401 '<html><head><meta http-equiv="refresh" content="0; url=/unauthenticated-page" /></head><body></body></html>'
私と同じ問題でここに来た人のために、このような.htaccessで
AuthType Basic
AuthName "some_name"
AuthUserFile "/path/to/password/passwd"
require valid-user
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
上記のルールが期待どおりに機能していません(承認してから書き換えます)
ディレクティブのマージ順序のため(「If」が最後にマージされる場合)
それを指摘するためにアレクからのコメントに感謝します
そのため、IfModuleブラケットを削除すると、ルールが機能し始めました。