2012-06-13 28 views
1

我試圖將一些簡單的.htaccess重寫轉換爲web.config xml;一切都很好,但是我遇到了一個涉及查詢字符串的問題。將.htaccess轉換爲web.config時查詢字符串追加

這裏是的.htaccess規則:

RewriteRule ^table/([a-zA-Z0-9\-_]+)/delete/([^/\.]+)$ table-index.php?mode=delete&type=$1&id=$2 [QSA,L] 

這是我如何把它翻譯:

<rule name="delete"> 
    <match url="^table/([a-zA-Z0-9\-_]+)/delete/([^/\.]+)$" ignoreCase="true" /> 
    <action type="Rewrite" url="table-index.php?mode=delete&amp;type={R:1}&amp;id={R:2}" appendQueryString="true" /> 
</rule> 

從本質上講,我做了這個相同的,因爲我有與所有其他的(工作)規則,但這一個不是打球。唯一的區別是這個規則在.htaccess中有一條[QSA]指令,我將其轉換爲appendQueryString="true"

規則不破IIS,它只是不工作,要麼 - 應該怎樣爲顯示:

http://my.site/admin/table/mailing-list/delete/1?confirm=true 

被顯示爲

http://my.site/admin/table-index.php?confirm=true 

一個缺少相當多的重要的信息並導致事情不會發生......當URL中沒有?confirm = true查詢字符串時,同樣的規則正常運行。

任何人都可以協助嗎?

回答

0

我又看了一遍,發現了我自己的解決方案。重寫規則並沒有什麼錯,相反,我依靠的是IIS沒有提供的$ _SERVER ['REDIRECT_URL']鏈接中的一個apache服務器變量,而是$ _SERVER ['REQUEST_URI']爲我修復了它。

這不會產生任何錯誤,因爲我已經預料到某些服務器可能不會提供該變量,並且會退回到另一個服務器上 - 但是在更改我的系統以使其工作之前寫入了該代碼在其中引起問題的部分使用重寫的URL ...!

+0

很高興你的工作。我嘗試使用您的正則表達式,但它只適用於以'table /'開頭的文本,所以任何網址都無法使用它。 – TWickz

+1

是的,這是針對不同目的的一些規則之一,在這種特殊情況下 - 它只是用於某些URLS。我認爲正則表達式應該工作,因爲它在htaccess中起作用,所以起初不清楚哪裏出了問題。去證明,有時用新鮮的眼睛看東西是一種方式! – Codecraft