我在迁移到 wordpress 3.1.1 多站点和 URL 重写规则时遇到了一个有趣的问题。index.php 路由以及 ms-files.php?file= 规则全面失败。当您通过 index.php 路由永久链接时,ROOT 站点具有正常工作的功能。(编辑:这在网络站点中也很普遍,据我所知,规则 7 是此处失败的罪魁祸首。)
媒体规则 (规则 2) 也失败了。生成的链接返回“哎呀,找不到”404 样式错误。
规则部分的一切看起来都正确,如下所示:
<rule name="WordPress Rule 1" stopProcessing="true">
<match url="^index\.php$" ignoreCase="false" />
<action type="None" />
</rule>
<rule name="WordPress Rule 2" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?files/(.+)" ignoreCase="false" />
<action type="Rewrite" url="wp-includes/ms-files.php?file={R:2}" appendQueryString="false" />
</rule>
<rule name="WordPress Rule 3" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?wp-admin$" ignoreCase="false" />
<action type="Redirect" url="{R:1}wp-admin/" redirectType="Permanent" />
</rule>
<rule name="WordPress Rule 4" stopProcessing="true">
<match url="^" ignoreCase="false" />
<conditions logicalGrouping="MatchAny">
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" />
</conditions>
<action type="None" />
</rule>
<rule name="WordPress Rule 5" stopProcessing="true">
<match url="^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*)" ignoreCase="false" />
<action type="Rewrite" url="{R:1}" />
</rule>
<rule name="WordPress Rule 6" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?(.*\.php)$" ignoreCase="false" />
<action type="Rewrite" url="{R:2}" />
</rule>
<rule name="WordPress Rule 7" stopProcessing="true">
<match url="." ignoreCase="false" />
<action type="Rewrite" url="index.php" />
</rule>
您可以通过访问以下网址查看所展现的行为:UB 新闻发布平台 1 UB 新闻发布平台 2
请注意,在临时站点 2 上,媒体无法正常运行。但是,当您访问以下链接时,格式可以正常工作,并且照片可以正常显示。 http://staging.business-school-online.com/news/wp-includes/ms-files.php?file=2011/04/online-education-300x198.jpg
编辑:WP 生成的链接是http://staging.business-school-online.com/news/files/2011/04/online-education-300x198.jpg
有人可以对失败的 url-rewrite 规则提供一些见解吗?根据 regex buddy,结构是正确的。
答案1
我还没有使用过 wordpress 链接本身,但让我们从媒体规则开始。操作中似乎缺少 2 项。它没有 /news/(可在 {R:1} 中使用),并且没有考虑 -300x198。不考虑图像大小,这将处理根:
<rule name="WordPress Rule 2" stopProcessing="true">
<match url="^([_0-9a-zA-Z-]+/)?files/(.+)" ignoreCase="false" />
<action type="Rewrite" url="{R:1}wp-includes/ms-files.php?file={R:2}" appendQueryString="false" />
</rule>
对于图像大小,如果您可以编辑原始链接那就太理想了,否则您的匹配网址只需要拉出.jpg,并在操作中添加图像大小加上.jpg。
解决此问题有三个好的选择:
- 失败请求跟踪,它将显示规则的前后路径
- IIS 日志将显示尝试的路径。例如,这应该显示类似“wp-includes/ms-files.php?file=2011/04/online-education.jpg”的内容
- www.sysinternals.com 的 Procmon 将显示它尝试访问磁盘上的路径。