2012-01-10 57 views
2

它總是令我驚訝。當你問一個關於棧溢出的問題時,url沒有任何get語句。它也沒有像.cgi或.php這樣的擴展名。StackOverflow如何避免其URL中的文件擴展和GET參數?

但是它不是一個靜態的html頁面,它是數據庫驅動的,因爲它在你發佈答案或問題時發生變化。

它是否與他們的.htaccess配置有關。如何才能達到類似的效果。

使用PHP或其他語言如何有人創建一個動態的可編輯的PHP,而無需手動做到這一點,例如通過像我提交這個問題的方式。

+3

http://httpd.apache.org/docs/2.0/misc/rewriteguide.html或http://www.iis.net/download/urlrewrite – 2012-01-10 22:06:34

+3

調查「乾淨網址」或「漂亮網址」和「 mod_rewrite的」。 – ceejayoz 2012-01-10 22:06:37

+0

看看像mod_rewrite(對於Apache)的東西。 – Macmade 2012-01-10 22:07:06

回答

7

Pretty/Clean/Fancy URLs

從本質上講,Web服務器知道該URL的段實際上得到的參數,並交給受PHP /紅寶石/ .NET /等前「重新寫」的URL。

例如,Apache使用mod_rewrite模塊來完成此行爲。

0

有些框架默認是這樣做的。例如,看看Yii或Zend Framework,他們會讓你達到這個效果。

他們通常會登錄Web服務器以協助實現目標。

1

Mod_rewrite就是一個例子。這可以用來在你的應用程序中隱藏.php擴展名。

或者,如果您使用的是應用平臺就像任何的Java的東西,或者Django的或瓶中Python或Ruby on Rails的或耙紅寶石或等等等等等等

其對Web服務器如何處理經紀請求到您用於處理交互的應用程序層。從mod_php的插件fast_cgi到WSGI等

3

雖然不能講#1,我知道,一個常用的方法是使用mod_rewrite到漂亮的URL轉換爲一個以「get」參數。許多解決方案包裝mod_rewrite,其他方式包括[非Apache] Web服務器。

這個cheetsheet也很有幫助。

2

這些被稱爲Clean URLs,也被稱爲漂亮或友好的URL:

清潔網址,REST風格的URL或用戶友好的URL是純粹的結構不包含查詢字符串,而是隻包含 網址 資源的路徑(在方案[例如http]和權威 [例如example.org]之後)。這通常是爲了審美,可用性或搜索引擎優化(SEO)的目的而完成的。爲網站或網絡服務設計一個乾淨的URL結構的其他原因包括確保 單個資源多年保持在同一個URL下,這使得萬維網成爲一個更穩定和有用的系統,並使它們變得難忘,合乎邏輯,易於輸入,以人爲中心,而且壽命長。

每個Web服務器都有自己的方法來管理乾淨的URL。 Apache使用.htaccess文件中的mod_rewrite讀取規則。有關於人們如何使用這個有很多的堆棧溢出的例子:

https://stackoverflow.com/search?q=htaccess+rewrite

有了你管理一組關於如何重寫URL規則得到觸發命名腳本請求大多數網絡服務器。例如,您可能會請求/questions/8811192/question-title,但服務器會將其重寫爲/mywebsite.php?id=8811192&convention=questions,那麼您的腳本mywebsite.php將使用參數id和約定設置運行,以便腳本知道用戶最初請求的內容。然後它會諮詢數據庫並動態創建頁面。

請查閱您的Web服務器文檔以獲取有關乾淨URL的更多信息。

0

Url路徑不必限定在文件系統上的任何物理位置。

您可以在您的web應用程序中解析url並執行映射到特定url模式的代碼。把它看作是一個內部的,在應用程序中的mod_rewrite。大多數現代Web框架都有一些基於URL的調度器。但是,如果您使用的是cgi腳本或類似cgi的應用程序(例如php-cgi,其實是一個fast-cgi協議服務器),您將不得不使用提到的mod_rewrite或一些類似的解決方案取決於你使用的網絡服務器。