WordPress

przekierowanie – WordPress (za HAProxy i Jetty), a nie na wielu serwerach, w podfolderze – i /en/wp-admin/przekierowuje do /wp-admin/

  • 8 sierpnia, 2021
  • 4 min read
przekierowanie – WordPress (za HAProxy i Jetty), a nie na wielu serwerach, w podfolderze – i /en/wp-admin/przekierowuje do /wp-admin/


Używam nietypowej konfiguracji do hostowania 3 instalacji WordPress w CentOS 8 Linux.

Z przodu mam HAProxy (do odciążenia TLS), następnie skonfigurowałem Jetty dla FastCGI i php-fpm i wreszcie WordPress.

Używam WordPressa wokół gry słownej napisanej w Pixi.js.

Od kilku lat używam 3 różnych adresów IP i 3 różnych nazw domen dla 3 wersji językowych mojej gry: en, de, ru.

Jednak moja gra słowna nie powiodła się, więc zdecydowałem się zrezygnować z dodatkowych nazw domen i adresów IP i po prostu użyć folderów do obsługi mojej gry:

  • wordbyfarber.com/en
  • wordbyfarber.com/de
  • wordbyfarber.com/ru

To zadziałało dobrze, nie używam multisite i ustawiłem

define('WP_HOME', '
define('WP_SITEURL', '

w en/wp-config.php (to samo dla de i ru), a także w desce rozdzielczej:

panel

I już możesz zobaczyć mój problem na powyższym zrzucie ekranu:

Podczas gdy strony internetowe dla użytkowników działają dobrze, pulpit administratora pod adresem /en/wp-admin/ natychmiast przekierowuje do /wp-admin co nie jest w porządku, ponieważ nie używam multisite.

Próbowałem sam rozwiązać problem i dużo szukałem w dokumentach itp.

Zastanawiałem się również, kto robi przekierowanie, czy to JS czy PHP?

Wydaje mi się, że robi to kod PHP WordPressa, który z jakiegoś powodu wysyła new Location nagłówek:

Warto przeczytać!  Niestandardowa klasa do menu nawigacyjnego wp

wget

Jak widać na powyższym zrzucie ekranu, podczas używania wget – z jakiegoś powodu WordPress usunie /en ciąg z /en/wp-admin path i przekierować do nowej lokalizacji.

Dlaczego tak się dzieje i jak to zatrzymać?

Próbowałem wyszukać w kodzie źródłowym WordPress za pomocą:

find ./en/ -iname \*.php| xargs grep -riw redirect_to

ale nie udało mi się jeszcze znaleźć przyczyny.

AKTUALIZACJA: Nie mam żadnego pliku .htaccess, ponieważ używam Jetty skonfigurowanego dla FastCGI z następującym plikiem konfiguracyjnym:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"
    "
<Configure class="org.eclipse.jetty.servlet.ServletContextHandler">

    <New id="root" class="java.lang.String">
        <Arg>/var/www/html/wordsbyfarber.com/en</Arg>
    </New>

    <Set name="contextPath">/en</Set>
    <Set name="resourceBase"><Ref refid="root" /></Set>

    <Set name="welcomeFiles">
        <Array type="string">
                <Item>index.php</Item>
                <Item>index.html</Item>
        </Array>
    </Set>

    <Call name="addFilter">
        <Arg>org.eclipse.jetty.fcgi.server.proxy.TryFilesFilter</Arg>
        <Arg>/*</Arg>
        <Arg>
            <Call name="of" class="java.util.EnumSet">
                <Arg><Get name="REQUEST" class="javax.servlet.DispatcherType" /></Arg>
            </Call>
        </Arg>
        <Call name="setInitParameter">
            <Arg>files</Arg>
            <Arg>$path /index.php?p=$path</Arg>
        </Call>
    </Call>

    <Call name="addServlet">
        <Arg>
            <New class="org.eclipse.jetty.servlet.ServletHolder">
                <Arg>default</Arg>
                <Arg>
                    <Call name="forName" class="java.lang.Class">
                        <Arg>org.eclipse.jetty.servlet.DefaultServlet</Arg>
                    </Call>
                </Arg>
                <Call name="setInitParameter">
                    <Arg>dirAllowed</Arg>
                    <Arg>false</Arg>
                </Call>
                <Call name="setInitParameter">
                    <Arg>gzip</Arg>
                    <Arg>true</Arg>
                </Call>
            </New>
        </Arg>
        <Arg>/</Arg>
    </Call>

    <Call name="addServlet">
        <Arg>org.eclipse.jetty.fcgi.server.proxy.FastCGIProxyServlet</Arg>
        <Arg>*.php</Arg>
        <Call name="setInitParameter">
            <Arg>proxyTo</Arg>
            <Arg>
        </Call>
        <Call name="setInitParameter">
            <Arg>prefix</Arg>
            <Arg>/</Arg>
        </Call>
        <Call name="setInitParameter">
            <Arg>scriptRoot</Arg>
            <Arg><Ref refid="root" /></Arg>
        </Call>
        <Call name="setInitParameter">
            <Arg>scriptPattern</Arg>
            <Arg>(.+?\\.php)</Arg>
        </Call>
    </Call>
</Configure>


Źródło

Warto przeczytać!  php — Wordpress zwraca stronę błędu „Łącze, z którego korzystałeś, wygasło” za każdym razem, gdy dodaję nową witrynę, dodaję użytkownika itp.