IIS7 和 URLRewrite 使用 Wordpress 3.1.1 重定向失敗
我在遷移到 wordpress 3.1.1 多站點和 url 重寫規則時遇到了一個有趣的問題。index.php 路由以及 ms-files.php?file= 規則全面失敗。當您通過 index.php 路由永久連結時,ROOT 站點具有正常工作的功能。(編輯:這在網路站點中也很普遍,據我所知,規則 7 是這裡失敗的罪魁禍首。)
媒體規則 (rule2) 也失敗了。生成的連結正在拉回“找不到糟糕的”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 News Staging site 1 UB News Staging Site 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 規則提供一些見解嗎?根據正則表達式夥伴的結構是正確的。
我沒有使用 wordpress 連結本身,但讓我們從媒體規則開始。行動中似乎缺少兩件事。它沒有 {R:1} 中可用的 /news/,也沒有考慮 -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>
對於圖像大小,如果您可以編輯原始連結,那將是理想的,否則您的匹配 url 只需拉出 .jpg,並在操作中添加圖像大小加 .jpg。
解決此問題的三個不錯的選擇是:
- 失敗的請求跟踪,它將顯示規則的路徑之前和之後
- IIS 日誌將顯示嘗試的路徑。例如,這應該顯示類似“wp-includes/ms-files.php?file=2011/04/online-education.jpg”的內容
- 來自 www.sysinternals.com 的 Procmon 將顯示它試圖在磁碟上訪問的路徑。