IIS Url 重写 Wordpress

IIS Url 重写 Wordpress

我在内部局域网上有 2 台服务器,一台运行 IIS 的 Windows 10 Pro PC(http://windows10-pc在局域网上),然后我有一个运行 Apache 2 的 Raspberry Pi(http://raspberrypi在局域网上)。

两台服务器都安装了 Wordpress。

我这样做是因为 Wordpress 占用了每个 Web 服务器上的根路径,而无法在一台 Web 服务器上拥有多个实例。即使我可以这样做,MySQL 数据库也会使用 wordpress 数据库名称,因此我认为在一台服务器上设置多个 Wordpress 站点需要进行相当多的配置。

我在 IIS 机器上设置了 URL Rewrite 和 ARR,这样如果外部 DDNS 指向不同的主机名,它会重新路由到内部 Raspberry Pi 机器。

这是可行的,但我尝试从每个 Wordpress 安装的外部访问的 URL 链接要么会http://本地主机在 IIS 计算机上,或http://raspberrypi在 Raspberry Pi 上。只有主页从外部加载,在 LAN 内部它们工作正常。

从内部来看,这是可行的,我需要它在 LAN 内部也能这样工作,但从外部来看,它失败了。这是 Wordpress 问题还是 IIS/Apache 问题?我该如何修复它?

答案1

这需要位于 RPI3 上的 /var/www/html/wp-config.php 以及 /etc/wordpress/wp-config.php 和 /etc/wordpress/config-raspberrypi.php 中:

定义('WP_DEBUG',false);

if (strpos($_SERVER['REMOTE_ADDR'], '192.168.1') !== false) { 
        define('WP_HOME', 'http://raspberrypi');
        define('WP_SITEURL', 'http://raspberrypi');
}
else if (isset($_SERVER['HTTP_X_ORIGINAL_HOST'])) {
        define('WP_HOME', 'http://'.$_SERVER['HTTP_X_ORIGINAL_HOST']);
        define('WP_SITEURL', 'http://'.$_SERVER['HTTP_X_ORIGINAL_HOST']);
}
else {
        define('WP_HOME', 'http://'.$_SERVER['SERVER_NAME']);
        define('WP_SITEURL', 'http://'.$_SERVER['SERVER_NAME']);
}

此外,在 IIS 服务器上,需要添加 HTTP_X_ORIGINAL_HOST 服务器变量。要添加的任何变量都必须以 HTTP_X_ 开头,否则它们不会显示在 PHP 中:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="ReverseProxyInboundRule1" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="http://raspberrypi/{R:1}" logRewrittenUrl="true" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="outside-rpi-host.ddnsfree.com" />
                    </conditions>
                    <serverVariables>
                        <set name="HTTP_X_ORIGINAL_HOST" value="{HTTP_HOST}" />
                    </serverVariables>
                </rule>
                <rule name="wordpress" stopProcessing="true">
                    <match url=".*" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php" logRewrittenUrl="true" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

这应该可以帮助任何在路由器的 80 端口上拥有 IIS 服务器、在 LAN 上不同 IP 上的 RPI 上托管 Wordpress 并希望使用 Url Rewrite 从指向同一 IP 地址的不同 DDNS IP 访问 RPI 的人。祝您玩得开心,愿您在基督里平安。

相关内容