WordPress

Wielostanowiskowy administrator drugiej witryny WordPress powodujący zbyt wiele błędów przekierowań

  • 8 grudnia, 2021
  • 3 min read
Wielostanowiskowy administrator drugiej witryny WordPress powodujący zbyt wiele błędów przekierowań


Mam instalację wielostanowiskową, która wydaje się działać dobrze dla pierwszej witryny, ale dla drugiej witryny panel administracyjny powoduje pętlę „zbyt wielu przekierowań”. Jaka jest poprawna konfiguracja nginx lub wordpress, aby to zadziałało?

Mam instalację inną niż WordPress pod adresem example.com
Mój pierwszy blog jest ustawiony na example.com/blog
Mój drugi blog jest ustawiony example.com/blog/tr. Frontend renderuje się dobrze.

Administrator pierwszej witryny działa dobrze, podobnie jak panel administratora sieci. Więc I /network/ powoduje, że strony działają dobrze. Adres URL skutkuje jednak zbyt dużą liczbą przekierowań.

Moja konfiguracja nginx dla sekcji wp-admin wygląda tak

if (!-e $request_filename) {
     rewrite /wp-admin$ $scheme://$host$uri/ permanent;     
     rewrite /wp-admin$ $host/$uri/ permanent;
     rewrite ^(/[^/]+)?(/wp-.*) $2 last;
     rewrite ^(/[^/]+)?(/.*.php) $2 last;
}

Oto moje tabele wp_blogs i wp_site

mysql> SELECT * FROM wp_site;
+----+-------------+--------+
| id | domain      | path   |
+----+-------------+--------+
|  1 | example.com | /blog/ |
+----+-------------+--------+

mysql> SELECT blog_id, site_id, domain, path FROM wp_blogs;
+---------+---------+-------------+-----------+
| blog_id | site_id | domain      | path      |
+---------+---------+-------------+-----------+
|       1 |       1 | example.com | /blog/    |
|       2 |       1 | example.com | /blog/tr/ |
+---------+---------+-------------+-----------+

wp-config.php

define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', false );
define( 'DOMAIN_CURRENT_SITE', 'example.com' );
define( 'PATH_CURRENT_SITE', '/blog/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );

Próbowałem zmienić ścieżkę dla drugiego bloga na coś z inną ścieżką, np /blg/tr na wypadek, gdyby był to błąd kolizji ścieżki, a ja nadal miałem problem. Próbowałem też utworzyć drugą witrynę w wp_sites i powiązać drugi blog z tą drugą witryną, również nie zrobiłem nic innego.

Warto przeczytać!  Rozwiązywanie problemów z błędami 404 w WordPress: kompletny przewodnik

Umieściłem również określone bloki lokalizacji nginx specjalnie dla nich /blog/tr/wp-admin i to wydawało się łamać go bardziej na różne sposoby.

Czy jest coś, czego mi brakuje lub dodatkowa dokumentacja, której nie znajduję, aby pomóc w debugowaniu sekcji wp-admin mojej drugiej witryny?

Sprawdzona dokumentacja / sugerowane kroki:

Próba uzyskania dostępu do pulpitu nawigacyjnego drugiej witryny w konfiguracji wielostanowiskowej kończy się błędem

EDYCJA: Pełna konfiguracja nginx

server {
        listen 80;
        listen 443 ssl;
        ## Your website name goes here.
        server_name example.com;
        ## Your only path reference.
        root /Users/lfarr/Sites/blog;
        ## This should be in your http block and if it is, it's not needed here.
        index index.php;

        ssl_certificate     /usr/local/etc/nginx/ssl/example.com+4.pem;
        ssl_certificate_key /usr/local/etc/nginx/ssl/example.com+4-key.pem;

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

        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

        if (!-e $request_filename) {
            rewrite /wp-admin$ $scheme://$host$uri/ permanent;
            rewrite /wp-admin$ $host/$uri/ permanent;
            rewrite ^(/[^/]+)?(/wp-.*) $2 last;
            rewrite ^(/[^/]+)?(/.*.php) $2 last;
        }

        #avoid php readfile()
        location ^~ /blogs.dir {
            internal;
            alias /var/www/example.com/htdocs/wp-content/blogs.dir ;
            access_log off;     log_not_found off; expires max;
        }

        location / {
                # This is cool because no php is touched for static content.
                # include the "?$args" part so non-default permalinks doesn't break when using query string
                try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
                #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
                include fastcgi_params;
                fastcgi_intercept_errors on;
                fastcgi_pass fastcgi_backend;
                #The following parameter can be also included in fastcgi_params file
                fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }
}


Źródło

Warto przeczytać!  Zarejestruj nowe domeny za pomocą konfiguracji i integracji jednym kliknięciem w WPMU DEV