質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.03%

WordPressの管理画面へのアクセスはリダイレクトさせないようにしたい

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 8,969

u_s_y

score 9

実現したいこと

wordpressで構築しているサイトを別サイトに301リダイレクトしています。
ただ、リダイレクト前のサイトの管理画面にはアクセスできるようにしておきたいのですが、
うまく実現できません。
RewriteCondを記述して除外できないかと試しているのですが、リダイレクト先のwp-adminへ
リダイレクトされてしまいます。
どのように記述すれば管理画面へのリダイレクトは除外できるのでしょうか。ご教授いただけると幸いです。

現状のhtaccessのコード

<Files ~ "^\.ht">
deny from all
</Files>

# Redirect
RewriteEngine On

# base path
RewriteBase /

RewriteCond %{REQUEST_URI} !^/wp-admin/
RewriteRule ^(.*)$ リダイレクト先URL/$1 [R=301,L]
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+2

wp-login.phpwp-adminへのアクセスを制限するために私が利用している記述を少し変えただけのものですが、よろしければ一度試してみてください。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

# リファラーが正しいかどうかを念の為にチェック(ドメインは書き換えてください)
RewriteCond %{HTTP_REFERER} ^http://(.*)?your-domain\.com [NC]

# (ログインできるように)ログイン画面または
RewriteCond %{REQUEST_URI} !^(.*)?wp-login\.php(.*)$ [OR]

# 管理画面ではない場合
RewriteCond %{REQUEST_URI} !^(.*)?wp-admin$

# リダイレクト(リダイレクト先は書き換えてください)
RewriteRule ^(.*)$ http://redirect-domain.com/$1 [R=301,L]
</ifModule>

追記
私が最初に回答した時の記述が正しく動作しないものだったので修正したものを追記しました。
実際に検証してみましたが、私の環境では問題なく動作しているのでおそらくこれで大丈夫だと思います。
(http:/0.0.0.0/はご自身の環境に合わせて書き換えてください)

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^(.*)?wp-login\.php
RewriteCond %{REQUEST_URI} !^(.*)?wp-admin
RewriteRule ^(.*)$ http://0\.0\.0\.0\/$1 [R=301,L]
</ifModule>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/22 09:38

    ありがとうございます。試させていただきましたが、やはり管理画面へのリダイレクトは切れませんでした。

    キャンセル

  • 2016/04/22 09:59 編集

    Chromeのシークレットモードでwp-login.phpにアクセスはできますか?
    また、アクセスができた場合はログインを試みてどのような結果になるか確認してみて下さい。

    追記
    WordPressのインストール先は wordpress/ などのサブディレクトリではなくドメイン直下のルートディレクトリですか?

    さらに追記
    回答を更新しました。

    キャンセル

  • 2016/04/26 17:53

    追記いただいたコードで管理画面へのアクセスができるようになりました!
    ありがとうございました。

    またChromeのシークレットモードでのアクセスは試しておりません…すいません。
    WordPressのインストール先はドメイン直下にインストールしておりました。またSSL対応しておりましたので、全てhttpsに置換してコードを記述しました。

    キャンセル

  • 2016/04/26 18:22 編集

    解決されたようで何よりです。

    ちなみに、今回はwp-adminディレクトリへのアクセス時に発生するリダイレクトを考慮して、wp-adminディレクトリ以下とwp-login.phpへのアクセスの両方を、付加される?以降のクエリも含めて除外する記述にしておかなければいけないというのがポイントだったように思います。

    今回は知識不足による誤りに私自身も気付くことができて助かりました。
    ありがとうございました。

    キャンセル

0

WP関連ファイルは全体的に除外する必要が在るのではないでしょうか。

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} ^/wp-admin/
RewriteCond %{REQUEST_URI} ^/wp-content/
RewriteCond %{REQUEST_URI} ^/wp-includes/

RewriteCond %{REQUEST_URI} ^/.htaccess
#RewriteCond %{REQUEST_URI} ^/index.php
RewriteCond %{REQUEST_URI} ^/info.php
RewriteCond %{REQUEST_URI} ^/license.txt
RewriteCond %{REQUEST_URI} ^/readme.html
RewriteCond %{REQUEST_URI} ^/readme-ja.html
RewriteCond %{REQUEST_URI} ^/wp-activate.php
RewriteCond %{REQUEST_URI} ^/wp-blog-header.php
RewriteCond %{REQUEST_URI} ^/wp-comments-post.php
RewriteCond %{REQUEST_URI} ^/wp-config.php
RewriteCond %{REQUEST_URI} ^/wp-config-sample.php
RewriteCond %{REQUEST_URI} ^/wp-cron.php
RewriteCond %{REQUEST_URI} ^/wp-links-opml.php
RewriteCond %{REQUEST_URI} ^/wp-load.php
RewriteCond %{REQUEST_URI} ^/wp-login.php
RewriteCond %{REQUEST_URI} ^/wp-mail.php
RewriteCond %{REQUEST_URI} ^/wp-settings.php
RewriteCond %{REQUEST_URI} ^/wp-signup.php
RewriteCond %{REQUEST_URI} ^/wp-trackback.php
RewriteCond %{REQUEST_URI} ^/xmlrpc.php
RewriteRule ^(.*)$ リダイレクト先URL/$1 [R=301,L]

追記:

WordPress 側でリダイレクトしてしまうとか。

functions.php

function load_script() {
    if ( !(     is_admin()
         || is_blog_admin()
         || is_user_admin()
         || is_network_admin()
         || is_404()
         || is_preview()
         ) && (
            is_home()
         || is_front_page()
         || is_archive()
         || is_category()
         || is_tag()
         || is_tax()
         || is_author()
         || is_date()
         || is_year()
         || is_month()
         || is_day()
         || is_time()
         || is_post_type_archive()
         || is_search()
         || is_singular()
         || is_single()
         || is_page()
         || is_attachment()
         || is_page_template()
         || is_paged()
         )
       ) {
        header ( 'HTTP/1.1 301 Moved Permanently' );
        header ( 'Location: '.'http://リダイレクト先URL'.$_SERVER['REQUEST_URI'] );
        exit();
    }
}
add_action( 'init', 'load_script' );

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/22 09:37

    .htaccessのリダイレクト記述も外して試しました…。やはりだめなようです…。

    キャンセル

  • 2016/04/22 13:32

    ちょっと修正しました。
    サイト構成がわからないため、これ以上はちょっと解らないかもしれません。

    また、別ディレクトリにWPの構成ファイルをすべて置き、そこのみ.htaccessで転送しないようにして、現在のWPとDBを同じものを使うことで運用する方法なども一応考えられます。
    ただ、リダイレクトが正常に行かない場合同じですが。

    キャンセル

  • 2016/04/26 17:54

    修正ありがとうございます。
    いただいたコードを試してみたのですが、管理画面のリダイレクトは切れませんでした。
    何度もご助言いただきありがとうございました。

    キャンセル

0

こんにちは。

特定のディレクトリをリダイレクトから穣害するために、ひろく用いられている方法と、少々変則的な方法のふたつを紹介させていただきます。

1)ルートディレクトリのみに「.htaccess」を配置する方法

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !(^/wp-admin/)
RewriteRule ^$ リダイレクト先URL/ [R=301,L]


2)ルートディレクトリと除外したいディレクトリのそれぞれに「.htaccess」を配置する方法

まず、ルートディレクトリに

RewriteEngine on
RewriteBase /
RewriteRule (.*) リダイレクト先URL/$1 [R=301,L]


と記述した「.htaccess」を配置する。

つづいて、wp-admin フォルダ内に

RewriteEngine off


と記述した「.htaccess」を配置する。

以上、ご参考いただければ幸いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる