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

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

ただいまの
回答率

87.49%

NGINXでindex.php無しの正規化をかけるとphpMyAdminログイン画面が表示され続ける

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 337

score 15

やりたいこと:
WordPressのページURLをindex.php無しで正規化しつつ
phpMyAdminを使用したい。

現状:
https://www.hoge.com/phpMyAdmin/
でログインしても、ログインIDとパスワード入力画面が出続ける

index.php無しにする正規化の部分(#A)を削除すると
phpMyAdminにはアクセスできるが
WordPressのページURLにindex.phpが表示されてしまう。

環境:
CentOS7 / php7.3 / kusanagi
WordPressはhttps://www.hoge.com/wp/にインストール
phpMyAdminはhttps://www.hoge.com/phpMyAdmin/にインストール

config(抜粋):

server {
        listen       443 ssl http2;
        server_name  hoge.com;
    ssl_certificate /etc/letsencrypt/live/hoge.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/hoge.com/privkey.pem; # managed by Certbot
        ssl_dhparam /etc/kusanagi.d/ssl/dhparam.key;
        ssl_session_tickets     on;
        ssl_session_ticket_key     /etc/kusanagi.d/ssl_sess_ticket.key;
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers "AES128+ECDHE:AES256+ECDHE:AES128+EDH:AES256+EDH:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4!CAMELLIA!AES128-SHA!AES128-SHA256!AES128-GCM-SHA256:!AES256-GCM-SHA384:!AES256-SHA256:!AES256-SHA!AES256-CCM8!AES256-CCM!AES128-CCM!ARIA128-GCM-SHA256!AES128-CCM8!ARIA256-GCM-SHA384";
        ssl_prefer_server_ciphers   on;
        access_log  /home/kusanagi/aaa/log/nginx/ssl_access.log main;
        error_log   /home/kusanagi/aaa/log/nginx/ssl_error.log warn;

        charset UTF-8;
        client_max_body_size 50M;
        root  /home/kusanagi/aaa/DocumentRoot;
        index index.php index.html index.htm;

        location = /50x.html {
                return 403;
        }

        rewrite /wp-admin$ $scheme://$host$uri/ permanent;

        location / {
                try_files $uri $uri/ /index.php?$args;

# B-start index.phpの内容がダウンロードされる
        location ~ \.php(.*)$ {
                    if ($request_uri ~* "^(.*/)index\.php(.*)$") {
                        return 301 $1$2;
                    }
        }
# B-end
        }

        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }

        location ~* /\.well-known {
                allow all;
        }

        location /phpMyAdmin/ {
                # Outer Word Press Files
                root /home/kusanagi/aaa/DocumentRoot;
                index index.php index.html index.htm;
        }

        location ~* /\. {
                deny all;
        }

        location ~* /(?:uploads|files)/.*\.php$ {
                deny all;
        }

        location ~* \.(jpg|jpeg|gif|png|css|js|swf|ico|pdf|svg|eot|ttf|woff)$ {
                expires 60d;
                access_log off;
        }

# A-start
        #if ($request_uri ~* "^(.*/)index\.php(.*)$") {
        #       return 301 $1$2;
        #}
# A-end

        location ~* /wp-login\.php|/wp-admin/((?!(admin-ajax\.php|images/)).)*$ {
                satisfy any;
                allow 0.0.0.0/0;
                allow 127.0.0.1;
                deny all;
                auth_basic "basic authentication";
                auth_basic_user_file  "/home/kusanagi/.htpasswd";
                location ~ [^/]\.php(/|$) {
                        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
                        if (!-f $document_root$fastcgi_script_name) {
                                return 404;
                        }
                        fastcgi_pass 127.0.0.1:9000;
                        fastcgi_index index.php;
                        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                        include fastcgi_params;
                        fastcgi_buffers 256 128k;
                        fastcgi_buffer_size 128k;
                        fastcgi_intercept_errors on;
                        fastcgi_read_timeout 120s;
                }
                include conf.d/security.conf;
        }

        location ~ [^/]\.php(/|$) {
                fastcgi_split_path_info ^(.+?\.php)(/.*)$;
                if (!-f $document_root$fastcgi_script_name) {
                        return 404;
                }
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
                fastcgi_buffers 256 128k;
                fastcgi_buffer_size 128k;
                fastcgi_intercept_errors on;
                fastcgi_read_timeout 120s;

                set $do_not_cache 1; ## page cache
                set $device "pc";

                if ($request_method = POST) {
                        set $do_not_cache 1;
                }

                if ($query_string != "") {
                        set $do_not_cache 1;
                }

                if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
                        set $do_not_cache 1;
                }

                if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
                        set $do_not_cache 1;
                }

                if ($http_user_agent ~* " Android |\(iPad|Android; Tablet; .+Firefox") {
                        set $device "tablet";
                }

                if ($http_user_agent ~* "Android .+ Mobile|\(iPhone|\(iPod|IEMobile|Android; Mobile; .+Firefox|Windows Phone") {
                        set $device "smart";
                }

                fastcgi_cache        wpcache;
                fastcgi_cache_key    "$device:$request_method:$scheme://$host$request_uri";
                fastcgi_cache_valid  200 10m;
                fastcgi_no_cache     $do_not_cache;
                fastcgi_cache_bypass $do_not_cache;

                add_header X-F-Cache $upstream_cache_status;
                add_header X-Signature KUSANAGI;
                include conf.d/security.conf;
        }

        location ~ /fcache-purge/([^/]+)(/.*) {
                allow 127.0.0.1;
                deny all;
                fastcgi_cache_purge wpcache "$1:GET:$scheme://$host$2";
        }

        # WebP Express rules
        # --------------------
        location ~* /wp/wp-content/.*\.(png|jpe?g)$ {
                add_header Vary Accept;
                expires 365d;
                if ($http_accept !~* "webp"){
                        break;
                }
                try_files
                        /wp/wp-content/webp-express/webp-images/doc-root/$uri.webp
                        $uri.webp
                        /wp/wp-content/plugins/webp-express/wod/webp-on-demand.php?xsource=x$request_filename&wp-content=wp-content
                        ;
        }

        # Route requests for non-existing webps to the converter
        location ~* /wp/wp-content/.*\.(png|jpe?g)\.webp$ {
        try_files
                $uri
                /wp/wp-content/plugins/webp-express/wod/webp-realizer.php?wp-content=wp-content
                ;
        }
        # ------------------- (WebP Express rules ends here)

        # WebP extra folder rules
        # -------------------------
        location ~* /images/.*\.(png|jpe?g)$ {
                add_header Vary Accept;
                try_files $uri$webp_suffix $uri =404;
        }
        location ~* /AAA/.*\.(png|jpe?g)$ {
                add_header Vary Accept;
                try_files $uri$webp_suffix $uri =404;
        }
        location ~* /common/images/.*\.(png|jpe?g)$ {
                add_header Vary Accept;
                try_files $uri$webp_suffix $uri =404;
        }
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • K_3578

    2021/05/11 16:42

    ごきNGINXで ←ごき?

    キャンセル

  • Katsu.Okada

    2021/05/11 16:45

    ご指摘ありがとうございます。修正しました

    キャンセル

回答 1

checkベストアンサー

+1

WordPress, phpMyAdmin の location を完全に分けて、WordPress の location だけでリダイレクトを設定するといいと思います。

(設定例)

location / {
    try_files $uri $uri/ /index.php?$args;

    location ~ \.php(.*)$ {

        ## fastcgi_pass など php-fpm への接続設定

        if ($request_uri ~* "^(.*/)index\.php(.*)$") {
                return 301 $1$2;
        }
    }
}

location /phpMyAdmin/ {
    root /home/kusanagi/aaa/DocumentRoot;
    index index.php index.html index.htm;

    location ~ \.php(.*)$ {

        ## fastcgi_pass など php-fpm への接続設定
        ## リダイレクト設定なし

    }
}

(2021/05/12 17:31) 追記

location 設定が多いですね。
WordPress, phpMyAdmin で location を分けるのはやめて、否定先読みで「/phpMyAdmin 以外だったら」という条件を付け加えるといいのではないでしょうか。

if ($request_uri ~* "^(?!/phpMyAdmin)(.*/)index\.php(.*)$") {
    return 301 $1$2;
}

ただ、WordPress 用の設定が phpMyAdmin に悪影響を及ぼす可能性を考えると、バーチャルホストで分けてしまった方がいいかもしれません。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2021/05/12 15:34

    回答ありがとうございます。

    分けてみましたところ
    index.phpの内容がダウンロードされてページ遷移しなくなりました。
    挿入した場所が悪かったのかもしれません。
    configの抜粋の仕方が悪かったかもしれませんので内容をフルバージョンで書き出してみますので
    確認頂けますでしょうか

    キャンセル

  • 2021/05/12 18:14

    ご確認ありがとうございます。
    希望通りの動作が得られました。
    ありがとうございます。

    キャンセル

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

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

関連した質問

同じタグがついた質問を見る