サポート » マルチサイト » マルチサイトでのベーシック認証の利用

  • 解決済 tk5

    (@tk5)


    こんにちは。
    マルチサイトでのログイン画面でベーシック認証を利用したいと思っています。以下の方法でマルチサイトではない場合はうまくいくのですが、マルチサイトの場合は「このウェブページにはリダイレクト ループが含まれています」なってしまいます。

    <files wp-login.php>
    AuthName "Login Password Required"
    AuthType Basic
    AuthUserFile /home/xxxx/.htpasswd
    require valid-user
    </files>

    WordPress の記述の部分を変更してみたりしたのですが、うまくいきません。

    # BEGIN WordPress
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    
    # add a trailing slash to /wp-admin
    RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
    
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteCond %{REQUEST_FILENAME} !^([_0-9a-zA-Z-]+/)?(wp-login.php)$  "#効果なし"
    RewriteRule ^ - [L]
    RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
    RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
    RewriteRule . index.php [L]
    # END WordPress

    どなたかマルチサイトでベーシック認証を使えるようにする方法をご教示いただければありがたいです。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • マルチサイトで検証していないので恐縮ですが…
    拙作のプラグイン WP Basic Auth で対応できるかもです。
    http://wordpress.org/plugins/wp-basic-auth/

    このプラグインは有効にするだけで WordPress のユーザ名/パスワードでサイト全体に BASIC 認証がかかります。
    ただし、画像ファイル等の静的ファイルについては BASIC 認証がかからないので注意してください。

    あっ、wp-login.php にだけかけたいんですね。じゃぁ、ちゃんと .htaccess を書きなおさないとですね。

    トピック投稿者 tk5

    (@tk5)

    wakamoto 様、
    早速のご回答いただき大変ありがとうございます。
    プラグイン WP Basic Auth はとても便利ですね。開発段階などでぜひ使わせていただきます。

    今回はログインページのみにベーシック認証を使いたいと思っています。 .htaccess をどのように書き直せばいいのか、もし可能であれば、ご教示いただければありがたいです。

    トピック投稿者 tk5

    (@tk5)

    初歩的なミスのようでした。
    ベーシック認証の記述を「# BEGIN WordPress」より前(上)に記述したところ、ローカル環境ではうまくいきました。

    <files wp-login.php>
    AuthName "Login Password Required"
    AuthType Basic
    AuthUserFile c:\xampp\etc\.htpasswd
    require valid-user
    </files>
    
    # BEGIN WordPress
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    
    # add a trailing slash to /wp-admin
    RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
    
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]
    RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
    RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
    RewriteRule . index.php [L]
    
    # END WordPress

    但し、サーバー環境(サブドメインにマルチサイトをインストール)ではまだ、「このウェブページにはリダイレクト ループが含まれています」となってしまいます。

    サーバー環境のインストールに問題があるのか、先日もプラグイン BackWPupをインストールしたところ最初に「 Warning: Cannot modify header information….」の表示が出たのですが、その後エラーはなくなり、またご紹介いただいたプラグイン WP Basic Auth をインストールしたところ以下のようなエラーが表示されます。

    Notice: Undefined offset: 1 in /home/xxxx/public_html/wp/wp-content/plugins/wp-basic-auth/plugin.php on line 74

    Warning: Cannot modify header information – headers already sent by (output started at /home/xxxx/public_html/wp/wp-content/plugins/wp-basic-auth/plugin.php:74) in /home/xxxx/public_html/wp/wp-content/plugins/wp-basic-auth/plugin.php on line 83

    Warning: Cannot modify header information – headers already sent by (output started at /home/xxxx/public_html/wp/wp-content/plugins/wp-basic-auth/plugin.php:74) in /home/xxxx/public_html/wp/wp-content/plugins/wp-basic-auth/plugin.php on line 84
    Authorization Required

    いずれもローカル環境では問題ないのですが。。。
    もう少し調べてみます。

    トピック投稿者 tk5

    (@tk5)

    すみません。混乱してしまっているようです。ローカル環境では試していなかったようで、ベーシック認証の記述の位置は前でも後でもどちらでも問題ありません。

    問題はやはりサーバー環境のほうのようです。しばらく時間をかけて調べてみます。

    トピック投稿者 tk5

    (@tk5)

    取りあえず、以下を functions.php に記述するとログインにベーシック認証を利用できるようになりましたが、なぜ、.htaccess を使ってのベーシック認証では、サーバー環境で「このウェブページにはリダイレクト ループが含まれています」となってしまうのかはまだわかりません。どなたか、お分かりになれば教えていただければありがたいです。

    add_action( 'login_init', 'basic_auth' );
    function auth_login_init() {
        if ( ! is_user_logged_in() ) {
            basic_auth();
        }
    }
    function basic_auth(){
        $hashed_user = "B.7zvNlp.z/Pxy"; //暗号化されたユーザー名
        $hashed_password = "10Lh53LdzKN1KZ"; //暗号化されたパスワード
        if (isset($_SERVER['PHP_AUTH_USER']) and isset($_SERVER['PHP_AUTH_PW'])){
            if (crypt($_SERVER['PHP_AUTH_USER'], $hashed_user) == $hashed_user && crypt($_SERVER['PHP_AUTH_PW'], $hashed_password) == $hashed_password){
                return;
            }
        }
        header('WWW-Authenticate: Basic realm="Restricted Area"');
        header('HTTP/1.0 401 Unauthorized');
        header('Content-type: text/html; charset='.mb_internal_encoding());
        die("Authorization Failed. Contact your administrator." );
    }

    上記の関数「basic_auth()」をプラグイン WP Basic Auth の中の関数「basic_auth()」で置き換えると、WordPress のユーザー名とパスワードを利用することができました。但し、あまりセキュリティについての理解がないので、それで安全かどうか(上記のコードも含めて)わかりません。

    トピック投稿者 tk5

    (@tk5)

    いろいろと途中経過は省略しますが、以下の2行を .htaccess に追加することで解決しましたので報告します。

    ErrorDocument 401 "Denied"
    ErrorDocument 403 "Denied"

    結果的には、現在使用しているホスティングのサーバー上にサブドメインを作成している場合に上記のような現象が発生していたことになります。

    トピック投稿者 tk5

    (@tk5)

    解決済みにします。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「マルチサイトでのベーシック認証の利用」には新たに返信することはできません。