3

我試圖使用IIS ISAPI重寫做到以下幾點...Isapi重寫301重定向解析爲404 - 循環引用?

我需要搜索引擎友好的網址是(默默)轉換回應用友好的URL,像這樣:

RewriteRule ^/seo-friendly-url/ /test/index.cfm [I,L] 

簡單足夠。

但我也需要已經在搜索引擎中編入索引的URL(例如)301重定向到友好版本。像這樣:

RewriteRule ^/test/index.cfm /seo-friendly-url/ [I,R=301] 

這些工作都單獨工作。但是,當我的.ini文件中都含有/ seo-friendly-url /顯示在我的瀏覽器地址欄中時,但我的服務是404。(是的,/test/index.cfm肯定存在!)

我知道它看起來像一個循環引用,但第一條規則只重寫IIS和應用程序之間的URL - 沒有重定向,所以我沒有再次進行Isapi Rewrite。或者我錯了嗎?

我已經啓用的ISAPI重寫記錄和我看到以下內容:

HttpFilterProc SF_NOTIFY_PREPROC_HEADERS 
DoRewrites 
New Url: '/seo-friendly-url/' 
ApplyRules (depth=0) 
Rule 1 : 1 
Result (length 15): /test/index.cfm 
ApplyRules (depth=1) 
Rule 1 : -1 
Rule 2 : 1 
Result (length 18): /seo-friendly-url/ 
ApplyRules: returning 301 
ApplyRules: returning 1 
Rewrite Url to: '/seo-friendly-url/' 

任何人有什麼想法?

回答

0

通過一些試驗和錯誤,我想出了一個解決方案。

指定重定向比賽是在字符串的結尾使用$符號: - 「?」

RewriteRule ^/test/index.cfm$ /seo-friendly-url/ [I,R=301] 

充分利用重寫URL中的重定向匹配字符串平凡的不同在這種情況下添加不必要的:

RewriteRule ^/seo-friendly-url/ /test/index.cfm? [I,L] 
0

您在這裏有兩個不同的重寫,如果你這樣做是正確

  1. 第一個永遠不會被客戶端用戶代理看出它應該工作。它要求/ seo友好,你重寫它的內部和迴應

  2. 第二個不是真正的重寫,而是一個重定向。你發回給客戶端,它重新請求/ seo友好 - 我認爲你需要使用[R = 301,L]來表示這是行結束 - 只是返回它(L做)

+0

根據文檔,不需要L - 「重定向規則總是最後一條規則」。儘管如此,我仍然試着用L和結果是一樣的 – stubotnik 2009-06-26 13:04:56