2009-02-06 132 views
1

這是一個雙重問題:正確的答案將轉到「如何在PHP中執行」,解釋是否有任何優勢,如果可能的話也會計數。如何在PHP中進行URL重寫?

我只是好奇,因爲我真的不知道,我在網頁上看到很多。

編輯:我不知道的技術名稱,但例如在這裏#2: 「http://stackoverflow.com/posts/edit/522452」是我的意思是「文件夾」(術語在問題的標題之前使用)。

+0

咦?你是什​​麼意思,「將論據作爲'文件夾'傳遞」? – Randolpho 2009-02-06 22:23:15

回答

6

如果你指的是/posts/edit/522452風格的網址,而不是/posts.asp?action=edit&postid=522452風格的URL(或任何其轉換到後端),通常通過URL重寫器完成,例如mod_rewrite。一種是URL規則可能是這樣的:

RewriteRule ^/posts/(\w+)/(\d+) /posts.asp?action=\1&postid=\2 

兩個主要的優點這類網址是:

  1. 「文件夾」式的URL是方便人們輸入和記憶。
  2. 該頁面「看起來像」到HTTP代理的頁面。傳統上,代理不會使用參數緩存頁面,因爲它們不代表單獨的內容並且頻繁更改(認爲搜索結果)。使用「文件夾式」網址可以使其正常緩存。

在PHP中,您可以通過$_GET['action']$_GET['postid']訪問這些選項,就好像瀏覽器要求重寫表單一樣。

0

優點是可讀性和可能在搜索引擎更好的位置。

如果您使用的是Apache,則可以通過mod_rewrite來實現此目的。在PHP中,您還可以查看預定義的全局變量 - 我認爲$_SERVER['REQUEST_URI']有效,但可能會有更好的變化。

如果使用普通PHP而不重寫,也可以從腳本的文件名中刪除.php,如果您正確配置服務器並因此仍然會獲得「好」的URL。

0

有幾個原因,但主要是:

  • 引擎優化的目的。搜索引擎通常會忽略'?'後的任何內容問號標誌,因此給你留下無索引頁面,甚至更糟的是,根本沒有索引。

  • 可讀性:

    www.somesite.com/products/devices/keyboards/20,asc 
    www.somesite.com/products/devices/keyboards/20,asc.html 
    

    看起來優於:

    www.somesite.com?show=products&cat=devices&sub_cat=keyboards&sort=asc&items=20 
    
  • 緩存。

有關如何做到這一點在Apache的信息: http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

1

作爲SEO目的,緩存和可讀性的一部分,正如其他人已經指出的那樣,我想補充一點,文件夾式參數也是激勵用戶使用參數「玩」的動機。例如,在Stackoverflow中,當通過標籤進行過濾時,通常會手動編輯網址,而不是查找相應的按鈕並單擊它。

2

要使用這樣的網址,您需要做的三個步驟:

  1. 告訴你的網絡服務器,這些請求應該重定向到你的PHP腳本。與Apache,你可以使用mod_rewrite module這樣做:

     
    RewriteEngine on 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteRule !^index\.php$ index.php [L] 
    

    該指令重定向每一個請求,但這並不在文件系統中一個文件匹配,以index.php

  2. 讓你的腳本來分析這些網址:

     
    $_SERVER['REQUEST_URI_PATH'] = preg_replace('/\?.*/', '', $_SERVER['REQUEST_URI']); 
    $segments = explode('/', trim($_SERVER['REQUEST_URI_PATH'], '/')); 
    var_dump($segments); 
    

    這可能是解析URL路徑,並得到每個路段的最簡單方法。

  3. 在輸出中使用此URL。 (微不足道)