Web服務器如何實現url重寫機制並更改瀏覽器的地址欄?
我沒有要求具體的信息來配置Apache,Nginx的,lighthttpd或其他!
我想知道什麼樣的信息發送到客戶端時,服務器要重寫url?url重寫是如何工作的?
回答
你說的是服務器端重寫(比如Apache mod-rewrite)嗎?對於這些,地址欄通常不會改變(除非執行重定向)。 或者你在談論重定向?這些通過讓服務器用HTTP代碼(301,302或307)和HTTP頭中的位置來響應來完成。
我在談論服務器端規則。謝謝! – cirne100
傑夫阿特伍德有關於這個偉大的帖子:http://www.codinghorror.com/blog/2007/02/url-rewriting-to-prevent-duplicate-urls.html
Web服務器如何實現URL重寫機制,改變了瀏覽器的地址欄?
URL重寫和轉發是兩個完全不同的東西。 服務器無法控制您的瀏覽器,因此無法更改瀏覽器的網址,但它可能會要求您的瀏覽器轉到其他網址。當瀏覽器從服務器獲得響應時,完全由瀏覽器決定如何處理該響應:它可以遵循重定向,忽略它或者確實意味着將服務器發送給服務器,直到服務器放棄爲止。服務器沒有用來更改地址的「機制」,它只是一個協議(HTTP 1.1),服務器在特定資源移動到其他位置時遵守的協議(即HTTP 1.1),即3xx響應。
URL重寫可以純粹在服務器端轉換URL。這使得Web應用程序開發人員能夠從多個URL訪問Web資源。
例如,用戶可能請求http://www.example.com/product/123
,但是由於重寫實際上是從http://www.example.com/product?id=123
服務的資源。請注意,瀏覽器中顯示的地址不需要更改。
如果需要,可以更改地址。爲此,在服務器上發生了與上述類似的映射,但服務器不是將資源呈現給客戶端,而是將重定向(301或302 HTTP代碼)發送回客戶端以用於重寫的URL。
對於上面這個例子可能看起來像:
客戶端請求
GET /product/123 HTTP/1.1
Host: www.example.com
服務器響應
HTTP/1.1 302 Found
Location: http://www.example.com/product?id=123
此時,瀏覽器會發出針對URL的新GET
請求在Location
標題中。
有兩種形式的「URL重寫」:純粹在服務器內部和那些重定向的情況下完成的。
如果它純粹在服務器內部,這是一個內部問題,並且只與服務器中實現的調度機制有關。例如,在Apache HTTPD中,mod_rewrite可以做到這一點。
如果是重定向,則會在響應中發送暗示重定向的狀態碼,同時發送一個Location
標頭,指示瀏覽器應該重定向到哪個URL(這應該是絕對URL)。 mod_rewrite
也可以這樣做,用[R]標誌。 狀態代碼通常是302 (found),但可以配置爲其他代碼(例如301或307)。
另一個非常常見的用途(通常不被注意,因爲它通常默認在Apache HTTPD中)是在目錄上重定向到帶有斜線的URL。這是由mod_dir實現:
A「斜線」,當服務器收到 請求重定向發出 一個URL
http://servername/foo/dirname
其中目錄名是一個目錄。 目錄需要一個斜槓, ,所以mod_dir發出重定向到http://servername/foo/dirname/
。
有兩種類型的行爲。
一個是重寫,另一個是重定向。
重寫
服務器執行替代本身,使得像http://example.org/my/beatuful/page
一個URL被理解爲http://example.org/index.php?page=my-beautiful-page
隨着改寫,客戶端不會看到任何和重定向僅供內部使用。瀏覽器中沒有URL更改,只是服務器以不同的方式理解它。
重定向
服務器檢測到服務器不需要該地址。 http://example.org/page1
已移至http://example.org/page2
,因此它會通過HTTP 3xx代碼告知瀏覽器新頁面是什麼。然後客戶請求這個頁面。因此瀏覽器中的地址發生變化!
過程
過程保持不變,既受這個圖來描述:
備註每重寫/重定向觸發器來重寫規則新的呼叫(有例外IIRC )
可能對停止循環有用。 (既然它已經發生過一次,所以不會重寫)。
- 1. URL重寫如何工作?
- 2. URL重寫如何工作?
- 3. URL重寫模塊如何工作
- 4. URL重寫工作.html但不是.php
- 5. htaccess的重寫是如何工作的
- 6. URL重寫不工作
- 7. URL重寫不工作-htaccess
- 8. URL重寫不yetanotherforums工作
- 9. htacces重寫URL不工作
- 10. URL重寫沒有工作
- 11. URL重寫不工作?
- 12. URL重寫不工作.htaccess
- 13. URL重寫不工作
- 14. 笨URL重寫不工作
- 15. URL重寫不工作
- 16. URL重寫不工作
- 17. 的.htaccess URL重寫工作,但不是重定向
- 18. CodeIgniter的URL重寫不工作
- 19. 的.htaccess URL重寫工作不正常
- 20. WordPress的URL重寫不工作/註冊
- 21. 與htaccess的URL重寫不工作
- 22. 的.htaccess URL重寫不工作
- 23. 的.htaccess重寫URL不工作
- 24. URLRewrite - 重寫後的URL不工作
- 25. 的.htaccess URL重寫不工作
- 26. URL重寫工作,但空的記錄
- 27. htaccess的URL重寫工作不正常
- 28. 的.htaccess URL重寫笨不工作
- 29. URL重寫不工作的網址
- 30. 如何重寫URL和301重定向一起工作
看看RFC 2616的10.3節:http://www.ietf.org/rfc/rfc2616.txt –