Iis-7

IIS7 和 URLRewrite 使用 Wordpress 3.1.1 重定向失敗

  • April 13, 2011

我在遷移到 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 將顯示它試圖在磁碟上訪問的路徑。

引用自:https://serverfault.com/questions/259304