2010-07-30 32 views
4

在MVC框架中,我有一個帶有「標識符」字段的模型。該字段可以是用戶使用的唯一標識符。然後我在URL中使用這個標識符字段來訪問相關資源。什麼是在URL的一部分中使用「/」的乾淨方式

/people/<identifier>/ 

在一個這樣的情況下,用戶正在使用的格式00/000的標識符。你們中間很快就會馬上發現問題 - 我們怎麼知道哪一部分是標識符,哪一部分是行動?

顯而易見的解決方案是使用URL轉義(%2F是相關的代碼)。但是,這會讓我的apache負載平衡代理以及我們的演示盒(運行乘客)上的應用程序服務器混淆不清。雖然煩人的是,這在本地開發服務器上工作正常。包含%2F的網址似乎會導致服務器發生404錯誤(不是應用程序!)。

我在尋找的是解決這個問題的一般方法,同時保持一個整潔的URL。

導致此問題的堆棧是:Ruby 1.8.7,Merb 1.0.12,Apache對生產中的瘦集羣進行負載平衡,演示服務器上的Passenger以及在開發時使用unproxied thin。

+0

這是有點晚了,但看雙重編碼斜線作品如果。你的URL看起來像你正在使用'mod_rewrite' - 在某些情況下需要雙重編碼(這是令人難以置信的煩人)。 – pinkgothic 2011-02-22 13:49:15

+0

我沒有使用mod_rewrite,Apache只是使用mod_proxy將URL發送到應用程序。 – Glenjamin 2011-03-08 12:00:31

回答

1

您始終可以使用自制編碼替換/使用您的標識字段中從未使用的其他字符,然後在從URL中讀取時將其轉換回來。

例如:

http://yoursite/people/00/000

成爲

http://yoursite/people/00-000

+0

不幸的是,系統的每個用戶都使用不同的格式來編號 - 我需要儘可能地支持他們。我正在用「斜線」(這個詞)替換「/」,這似乎有點愚蠢,但最終還是有效的。 – Glenjamin 2010-08-09 10:55:40

4

最簡潔的方法是首先防止用戶輸入正斜槓字符。如果有必要支持這種格式,則無法使用URL轉義。

+0

我已經辭職了,不得不使用某種形式的轉義來允許這種格式 - 但是使用標準的URL轉義混淆了服務器。我在建議替代方法轉義在網址欄中看起來不錯 – Glenjamin 2010-08-09 10:53:10

相關問題