Iis-7
為什麼這個 IIS7 重寫會執行重定向?
我有一個用 301 重定向響應的重寫規則,但我不知道為什麼。
我在 WinHost 共享主機上,使用 IIS 7 重寫從我的帳戶的子文件夾中託管我擁有的另一個域。
預設情況下,WinHost 將您的其他域指向您帳戶的根目錄。所以我的目標有兩個:
- 我想將其他域文件物理上分開保存在子文件夾中
- 我想從地址欄中隱藏所述子文件夾
以便:
http://myotherdomain.com
從以下位置獲得服務:
E:\account_root\myotherdomain
所以使用 IIS 7 重寫模組,我生成了這個規則。
<xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="Test" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTP_HOST}" pattern="(^|\.)myotherdomain\.com$" /> </conditions> <action type="Rewrite" url="myotherdomain/{R:1}" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
我希望請求
myotherdomain.com
偏移到myotherdomain
子文件夾中。這是有效的,但前提是請求中沒有路徑。如果我請求
http://myotherdomain.com
我收到 200 響應並在我的瀏覽器中看到位於E:\account_root\myotherdomain
. 不會發生重定向。如果您向請求添加路徑,例如
http://myotherdomain.com/test
,現在我收到 301 重定向到重寫的 URL:Response: HTTP/1.1 301 Moved Permanently Location: http://myotherdomain.com/myotherdomain/test/
然後瀏覽器獲取:
Request: GET /myotherdomain/test/ HTTP/1.1
然後重寫規則再次在 IIS 上執行,最終 IIS 嘗試提供位於以下位置的預設文件:
E:\account_root\myotherdomain\myotherdomain\test
哪個不存在:
Response: HTTP/1.1 404 Not Found
所以重寫本身似乎正在工作;我不明白為什麼 IIS 將 301 重定向混入其中,但僅當請求中存在路徑時。
不是重定向以添加尾隨 / 嗎?
正如您所假設的,您的規則看起來是正確的,並且是重寫而不是重定向。在我看來,您網站中的其他內容正在導致 301 客戶端重定向。嘗試測試一個 .htm 頁面,看看它是執行重定向的 aspx 還是 htm。您的 URL 重寫規則不會導致這種情況。
你在正確的軌道上。我有幾篇關於這種情況的部落格文章,包括傳出規則: