我在 Windows Server 2019 上运行 IIS 10,上面安装了 WordPress(除其他外),并安装了 URL Rewrite 2.1。IIS 已针对 Wordpress 应用程序进行了正确配置,该应用程序本身运行良好。
我正在尝试从服务器的根目录定义 URL 重写规则,该规则将向 WordPress 应用程序发送某些请求。
如果我浏览到https://this.is.my.server.com/wp/this-is-a-test/
,页面加载正常。
/this-is-a-test
我定义了一个重写映射,其中包含要发送到的条目/wp/this-is-a-test/
,并创建了一个使用此映射重定向请求的重写规则,它工作正常 - 原始 URL 返回 301 HTTP 状态,并且请求被转发到预期的 URL。规则如下:
<rule name="Rewrite rule1 for RewriteFriendlyUrlsToBlog" enabled="true" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{RewriteFriendlyUrls:{REQUEST_URI}}" pattern="(.+)" />
</conditions>
<action type="Redirect" url="{C:1}" appendQueryString="true" logRewrittenUrl="true" />
</rule>
但是,我需要重写规则,而不是重定向。如果我将此规则编辑为重写,则会收到 404 错误。调整后的规则与之前的规则完全相同,只是重写而不是重定向:
<rule name="Rewrite rule1 for RewriteFriendlyUrlsToBlog" enabled="true" stopProcessing="false">
<match url=".*" />
<conditions>
<add input="{RewriteFriendlyUrls:{REQUEST_URI}}" pattern="(.+)" />
</conditions>
<action type="Rewrite" url="{C:1}" appendQueryString="true" logRewrittenUrl="true" />
</rule>
详细的错误信息包括:
Requested URL: https://this.is.my.server.com/wp/this-is-a-test/
...这向我暗示了两件事:
- 重写规则本身正确发送请求,但是
- 重写的请求可能缺少 PHP/WordPress 正确解释请求所需的信息,或者
- WordPress 文件夹中将非文件或文件夹的请求重定向到的规则
index.php
由于某种原因未执行。
但我不知道需要做什么才能使这个重写规则正常工作。
通过反复试验,我发现为了正确进行重写,我需要重写
index.php
- 确保选中“附加查询字符串”选项 - 而不是预期的 URL。这似乎有效:
也可以使用重写映射。
它向我表明,对于重写,无论您的“stopProcessing”选项设置为何,WordPress 文件夹中将既不是文件也不是文件夹的请求重写到index.php 的规则不会被处理。