WordPress(在HAProxy和Jetty之后),而不是MultiSite,在子文件夹中-并且/en/wp-admin/保持重定向到/wp-admin/

时间:2021-08-08 作者:Alexander Farber

我正在使用一种不同寻常的设置在CentOS 8 Linux上托管3个Wordpress安装。

在前面我有HAProxy(卸载TLS),然后我有Jetty configured for FastCGI php fpm和Wordpress。

我正在使用Wordpress编写一个用Pixi编写的文字游戏。js。

几年来,我一直在使用3个不同的IP地址和3个不同的域名作为我游戏的3种语言版本:en、de、ru。

然而,我的文字游戏并不成功,因此我决定放弃额外的域名和IP地址,只使用文件夹为我的游戏服务:

wordsbyfarber。com/en-wordsbyfarber。com/de

  • 单词缩写。com/ru
  • 这很有效,我没有使用多站点,我设置了

    define(\'WP_HOME\', \'https://wordsbyfarber.com/en\');
    define(\'WP_SITEURL\', \'https://wordsbyfarber.com/en\');
    
    在en/wp配置中。php(de和ru相同)以及仪表板中:

    dashboard

    您已经可以在上面的屏幕截图中看到我的问题:

    虽然面向用户的网站工作正常,但/en/wp-admin/ 立即重定向到/wp-admin 这是不好的,因为我没有使用多站点。

    我曾试图自己解决这个问题,并在文档中搜索了很多内容。

    我还想知道,谁在做重定向,是JS还是PHP?

    在我看来,这是由Wordpress的PHP代码完成的,出于某种原因,它发送了一个新的Location 标题:

    wget

    如上面的屏幕截图所示,使用wget - 由于某种原因Wordpress会删除/en 字符串来自/en/wp-admin 路径并重定向到新位置。

    它为什么这样做,如何阻止它?

    我尝试在Wordpress源代码中搜索:

    find ./en/ -iname \\*.php| xargs grep -riw redirect_to
    
    但还没找到原因。

    UPDATE: 我没有。htaccess文件,因为我正在使用Jetty configured for FastCGI 使用以下配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"
        "http://www.eclipse.org/jetty/configure_9_3.dtd">
    <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>http://localhost:9000</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>
    

    3 个回复
    SO网友:Alvaro Gilabert

    您的web服务器中是否安装了PHPMyAdmin或Adminer或类似的工具?您可以轻松地运行搜索;代替我建议进行搜索,看看所有匹配的记录是否都有意义。然后,运行搜索(&N);代替正如@WebElaine所提到的,WP倾向于将url存储在多个地方,包括一些插件,因此它并不总是一个直接的答案。

    SO网友:Mohammad Qasim

    这些URL存储在[prefix]_options (通常为wp\\U选项)表。但一旦你确定WP_HOMESITE_URL 在配置文件中,这些选项会在管理中自动禁用。

    对我来说,这个问题似乎与wordpress无关,而似乎与您的jetty配置中的fastcgi有关。

    SO网友:Serkan Algur

    您可以尝试;强制(&Q);WordPress使用手动定义的网站URL。将此代码添加到wp-config.php. 这种方法不是最好的解决方法,但你的情况就像紧急情况一样:D

    define(\'WP_HOME\', \'https://yourwebsite.com/en\');
    define(\'WP_SITEURL\', \'https://yourwebsite.com/en\');
    
    根据WordPress"Changing The Site URL"

    这不一定是最好的解决方案,只是将值硬编码到站点本身。使用此方法时,您将无法再在“常规设置”页面上编辑它们。