2013-04-21 85 views
0

我已經安裝通過Web組件的IIS重寫2.0模塊我在Windows Server 2012上IIS 2.0重寫模塊 - 404錯誤

我讀過幾篇文章,但我似乎無法讓我的簡單的重寫上班。

我想重寫http://www.acme.com/news/13/Jan/20http://www.acme.com/news.html#20-Jan-13

這是我使用的規則:

<rule name="news articles" stopProcessing="true"> 
    <match url="^news\/(.*)\/(.*)\/(.*)$" /> 
    <conditions> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
    </conditions> 
    <action type="Rewrite" url="news.html#{R:3}-{R:2}-{R:1}" appendQueryString="false" /> 
</rule> 

當我申請http://www.acme.com/news/13/Jan/20我的測試圖案的改寫工作。

但是,如果我瀏覽到http://www.acme.com/news/13/Jan/20我得到一個404錯誤:

Requested URL  http://www.acme.com/news.html#20-Jan-13 
Physical Path  C:\Webs\acme.com\www\news.html#20-Jan-13 

物理文件news.html存在,我可以直接瀏覽到它。

難道是這樣搞砸了嗎?很明顯,C:\ Webs \ acme.com \ www \ news.html#20-Jan-13不是一個物理文件,但我不知道如何解決這個問題。

我當然可以直接瀏覽到http://www.acme.com/news.html#20-Jan-13沒有問題。

任何人都可以協助嗎?

非常感謝提前。

乾杯, 馬克

+0

你確定它不是文件/文件夾的權限問題嗎? – 2013-04-21 14:24:55

+0

謝謝d_ethier。不可以,瀏覽器可以加載web根目錄下的所有文件,包括news.html。我的網站已經有好幾個月了,我只是決定創建友好的網址。我所有其他的重寫規則都在起作用 - 只是這一個不是。 – Mark 2013-04-21 22:52:24

回答

0

根據這個「How do write a rewrite rule in IIS that allows HTML anchors?」的答案,瀏覽器不會在#在URL請求到服務器後發送任何東西。它們是專門用於瀏覽器在結果頁面上滾動的標記。

如果您查看日誌,您是否看到包含錨標籤的完整頁面請求?

另一種可能是使用一些DOM加載JS頁面滾動到URL引用的錨點(jQuery的要求):

$(function() { 
    var a_tag = $("a[name='" + window.location.hash.replace("#", "") +']"); 
    $('html,body').animate({scrollTop: a_tag.offset().top}, 'slow'); 
}); 

雖然這可能沒有解決的友好預期問題網址。

+0

感謝d_ethier的努力,但這不是我所期望的,但它可能需要做的:)是的,日誌顯示Web服務器試圖加載文件news.html#dd-mmm-yy(它當然不存在)。所以經過大量搜索後,我得出結論:不能重寫頁面錨點(但是可以重定向 - 這不允許「友好」的url保持原位)。所以我想我必須使用傳統的參數(例如news.html?d = dd&m = mm&y = yy)來解決我的問題,然後使用一些jQuery(如您所建議的)將參數轉換爲頁面上的錨點並滾動到它。 – Mark 2013-04-22 01:08:14