2010-07-10 111 views
1

我正在修改我的項目的URL格式。我們的搜索URL的基本格式是這樣的: -爲什麼我們不使用這種URL格式?

www.projectname/module/search/<search keyword>/<exam filter>/<subject filter>/... other params ... 

在沒有搜索關鍵字和考試過濾搜索,網址爲: -

www.projectname/module/search///<subject filter>/... other params ... 

我的問題是我們爲什麼不看這樣的URL帶有背對背斜線(www.projectname/module/search後有3個斜線)?請注意,我沒有在我的項目中使用.htaccess重寫規則。該網址在功能上完美運行。那麼,我應該使用這種格式嗎?

關於我們爲什麼選擇這個格式的詳細信息,請查看我的其他問題: - Suggest best URL style

回答

1

Web服務器通常會在應用程序查看請求之前刪除多個斜槓,以兼顧兼容性和安全性原因。在提供純文件時,通常允許路徑段之間的任意數量的斜線表現爲一個斜線。

空白URL路徑段在URL中不是無效的,但通常會避免使用它們,因爲具有空白段的相對URL可能會意外解析。例如,在/module/search中,指向//subject/param的鏈接與文件無關,但指向服務器subject的鏈接,其路徑爲/param

是否可以從原始URL中看到多斜槓序列取決於您的服務器和應用程序框架。例如在CGI(以及基於它的其他網關標準)中,通常用於實現路由的PATH_INFO變量通常會省略多個斜線。但是在Apache上有一個非標準的環境變量REQUEST_URI,它給出了請求的原始形式,而沒有減少斜槓或做任何%-unecaping,如PATH_INFO。所以如果你想允許空的路徑段,你可以,但它會減少你的部署選項。

還有其他字符串,而不是空的字符串,不做好路徑段。使用編碼的/(%2F),\(%5C)或空字節(%00)被許多服務器默認阻止。所以你不能在段中放入任何舊的字符串;它將不得不被處理以刪除一些字符(通常是'slug' - 如果刪除了所有字母和數字)。雖然你這樣做,你也可以用_替換空字符串。

+0

很好的解釋 – 2010-07-12 10:11:09

0

可能是因爲它沒有明確的規定是否多餘/應被忽略或沒有。

例如:http://news.bbc.co.uk/sporthttp://news.bbc.co.uk//////////sport都在Firefox和Chrome中顯示相同的頁面。服務器將這兩個URL視爲同一件事,而您的服務器顯然不是。

我不確定這個行爲是否定義在某個地方,但它似乎有意義(至少對於BBC網站 - 如果我輸入一個額外的/,它就是我的意思)。