サポート » マルチサイト » マルチサイト個々にアクセス制限をかけたい

  • 解決済 kries

    (@kries)


    超初心者です。
    マルチサイトそれぞれにアクセス制限をかける方法を教えて下さい。
    ————————————————————-

    ロリポップのロリポプランを利用しています。
    マルチサイト(サブディレクトリ形式)で3つのサイトを設定しました。

    1.http://ドメイン名.jp
    2.http://ドメイン名.jp/ブログA
    3.http://ドメイン名.jp/ブログB

    ブログAとBは、ロリポブログで4年書き貯めた記事を全て引越す予定で、
    制作中はミラーサイトにならないためにも、アクセス制限をかけたいと思っています。

    アクセス制限のプラグインを、3つそれぞれに設定しましたが、
    IDとパスワードを入力しても認証エラーになってしまいます。

    試したプラグインは下記の2種類ですが、両方とも同じ現象でした。
    WP BASIC Auth 
    WP Maintenance Mode

    プラグインを外すと、普通に表示されます。
    .htaccess の設定とぶつかっているのかも?と思いましたが
    何をどうすれば解決できますでしょうか?

    そもそも、マルチサイト個々にアクセス制限をかけることは可能ですか?

    アドバイス頂けると助かります。よろしくお願い致します。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • モデレーター jim912

    (@jim912)

    ネットワーク管理画面のアクセス制限をかけたいサイトの設定で、属性の「アーカイブ化」にチェックを入れるとログイン時しか表示されなくなりますので、これで対応可能ではないでしょうか。

    トピック投稿者 kries

    (@kries)

    jim912様

    アドバイスありがとうございます。
    早速設定してみました。

    ブログAとBは、ログアウト状態で非表示になりましたが
    ttp://ドメイン名.jp のサイトはアーカイブ化設定が無く、
    ログアウト時も表示されてしまいます。

    また、ログイン状態で制作しているため、ログイン時間も比較的長いので、
    (※ローカル環境はただ今構築中です。
    やはりアクセス制限をかけられるのであれば、そうしたいと思いました。
    引き続き、模索してみます。

    アーカイブ化につきまして、
    こういう方法もあるのだと、勉強になりました。
    有益なアドバイスありがとうございました!

    お手軽メンテナンスモード。/.maintenance を作って下記のコードを書いてください。条件のところは、お好きなように。通常モードへの復帰は、手動でこのファイルを削除です。

    <?php
    if ((strpos($_SERVER['REQUEST_URI'], '/wp-admin/') === false)
        && (strpos($_SERVER['REQUEST_URI'], 'wp-login.php') === false)) {
        foreach ($_COOKIE as $name => $value) {
            if (strpos($name, 'wordpress_logged_in_') === false)
                $upgrading = time();
        }
    }
    ?>

    デフォルトの表示が気に入らない場合は、/wp-content/maintenance.php でカスタマイズ。

    トピック投稿者 kries

    (@kries)

    kjmtsh様

    アドバイスありがとうございます。
    大変恐縮ですが、質問させてくださいませ。

    3つのサイトをそれぞれ個別に制御したい場合、
    /.maintenance ファイルは、どこへ入れればよろしいでしょうか?

    1.http://ドメイン名.jp 
    2.http://ドメイン名.jp/ブログA  
    3.http://ドメイン名.jp/ブログB 

    1はメイン直下にインストールしていますが、
    そこへ入れると3サイト全てがメンテナンス中になると思うので…
    となると、1だけメンテナンス中にしたい場合の入れる場所が分かりません。

    2と3は、 wp-content/cache/supercache/ドメイン.jp/→この中に
    2つのブログ名フォルダがあるので…その中でしょうか?
    ※ブログAだけは wp-content/cache/blogs/→この中にもブログAフォルダがあるので
    どちらへ入れるべきか悩んでいます。

    大変初歩的な質問になってしまい、恐縮ですが
    ご返答頂けると助かります。よろしくお願いいたします。

    /.maintenance は、定数 ABSPATH で指定されたディレクトリにないと相手にしてくれません。ABSPATH は、普通、wp-config.php で定義されていて、WordPress のインストールディレクトリのはずです。kries さんの場合は、

    http://ドメイン名.jp/.maintenance

    でしょう。どのスラッグを許可するかは、if の条件部分で制御できます。

    if ((strpos($_SERVER['REQUEST_URI'], '/wp-admin/') === false)
        && (strpos($_SERVER['REQUEST_URI'], 'wp-login.php') === false)
        && (strpos($_SERVER['REQUEST_URI'], '/ブログA/') === false)
        && (strpos($_SERVER['REQUEST_URI'], '/ブログB/') === false)) {
    ...
    }

    とすると、「ブログA」、「ブログB」を含むスラッグではメンテナンスモードになりません。条件の意味は、

    もし
        /wp-admin/ を含まない
        かつ wp-login.php を含まない
        かつ /ブログA/ を含まない
        かつ /ブログB/ を含まない
    ならば

    となります。条件のどれか一つでもマッチすると、全体がスキップされて、メンテナンスモードにはなりません。。本当は、この条件の中にログインチェックを入れたいところですが、コードが長くなるので、手抜きしてます。

    もっと細かい制御が必要なら、strpos() ではなく、preg_match() 関数と、正規表現を使うこともできます。サーチエンジンのクローラにはメンテナンスモードのページを拾ってほしくない、みたいな場合ですかね。が、そんなこんなをやっていると、「お手軽」じゃなくなってしまうので、ご自分で研究してみてください。

    • ABSPATH の定義 => /wp-config.php
    • wp_maintenance() の実行 => /wp-settings.php
    • wp_maintenance() の定義 => /wp-includes/load.php
    • PHP の動作 => PHP マニュアル
    • 条件式の考え方 => 高校1年生の数学の教科書
    トピック投稿者 kries

    (@kries)

    kjmtsh様

    回答ありがとうございました!

    分かりやすいご説明に感謝します。
    とてもよく理解できました。

    まだまだ分からないことも多く、ご迷惑おかけしました。
    勉強・研究します!

    ありがとうございました。
    解決とさせて頂きます。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「マルチサイト個々にアクセス制限をかけたい」には新たに返信することはできません。