我正在使用 IIS,它正在监听端口 80 和 443。现在,我们需要在 Apache 上配置一个 wordpress 网站,为了让它在默认端口上工作,我们尝试使用 URL 重写和 ARR 在 IIS 中创建代理,并将请求转发到不同的端口。两台服务器都在机器上。除了 css 中的绝对 URL 之外,一切都运行background-image()
良好url()
。
以下是 IIS 上的规则:
<rules>
<!-- Forward request to apache. SSL offloading enabled. -->
<rule name="Forward Request to Apache" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://mysite.xyz:8080/{R:1}" />
</rule>
</rules>
<outboundRules>
<rule name="Apache Outbound" enabled="true" preCondition="IsHtml">
<match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^(.*)mysite.xyz:8080(.*)$" />
<action type="Rewrite" value="https://mysite.xyz{R:2}" />
</rule>
<preConditions>
<preCondition name="IsHtml">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
</preConditions>
</outboundRules>
问题是一些内容是由一些组件(我认为)添加到页面中的,并且它在 http 上(因为站点 URL 设置在 http 上),并且在通过 SSL 加载时创建混合内容错误:
<div class="wpex-parallax-bg"
data-direction="top" data-velocity="-0.2"
style="background-image: url("http://mysite.xyz:8080/wp-content/uploads/2018/02/beach-sunset-2-1.jpg");
opacity: 1; background-position: 50% -297.956px;"
></div>
我认为这是某些 JS 造成的。是否有办法通过在 IIS 上添加出站规则或在 wordpress 端添加任何内容来修复此问题?
非常感谢您的任何建议!
附言:- 我不太懂 wordpress 所以请大家多包涵。:)
答案1
在 WordPress 哲学中,每个网站都有一个规范 URL,而 WordPress 在所有地方都使用绝对 URL。使用相对 URL 一直是讨论使用绝对 URL 是有根有据(虽然我不喜欢它,但我已经习惯接受它了。)
这里,Apache 监听的端口仅仅是一个技术要求,它也可能只监听来自本地主机的连接。你的网站不应该被访问http://example.com:8080/
,这意味着它可以有规范的地址http(s)://example.com/
(或子文件夹)。
由于您的网站有一个规范名称,您可以花一些时间调整您的 WordPress 网站以便在任何地方使用它:
- 在设置 > 常规,调整WordPress 地址 (URL)&网站地址 (URL)。
- 使用类似插件搜索和替换您可以用规范 URL 替换数据库中所有错误和相对 URL。
- 如果有人确实做了不同的事情,你可能必须手动更改它。
虽然可以使用 IIS 重写来实现这一点,但这种方法使将来的事情变得更容易:每当您需要更改 Web 服务器软件堆栈甚至规范 URL 时,您都可以在 WordPress 中以原生方式进行更改。将此视为一次性的可移植性工作。