我在内部局域网上有 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 的人。祝您玩得开心,愿您在基督里平安。