2013-10-28 76 views
2

我正在寫一個腳本,將從URL中選擇一個術語,並根據該術語從我的數據庫中提取正確的數據。搜索引擎優化友好術語語法

到目前爲止,我還添加了一行到我的.htaccess文件,將重寫我的網址搜索引擎友好的格式,是這樣的:

http://mydomain.com/catalogue/some-item-name 

在實際的PHP頁面我們把這個變量,帶破折號

$item= str_replace('-', ' ', $_GET['item']); 

並將項目與我的頁面上的隱藏列表匹配,以便將匹配與jQuery進行匹配。

一切工作正常,除非我真的有項目名稱短劃線。我的腳本刪除所有破折號。我應該:

  1. 將實際的破折號換成別的東西嗎?
  2. 找到一個方法剝離一個短劃線?

如果我是拉從DB我可能已經使用的術語WHERE LIKE「%$%項目」,而是因爲我必須匹配確切期限alredy出現在我的HTML代碼,我」項目米有點卡住了。

謝謝。

+0

大多數網站都像stackoverflow(檢查URL),所以簡而言之:'http://mydomain.com/catalogue/12345/some-item-nam',然後你只需引用ID(所以文本並不重要)。 – h2ooooooo

+1

爲什麼不將URI重寫爲'http:// mydomain.com/catalog/ID/some-item-name'並使用(數字)ID來獲取項目?如果兩個項目具有相同的名稱(或在名稱被重寫後名稱相同),這也可以工作。 – Reeno

+0

是的,我也在考慮這樣做,但在我這樣做之前,我想我會試圖找出沒有使用ID。 – santa

回答

1

我們使用一個系統來檢查傳入的URI與數據庫的對應關係,並查看發送給用戶的位置。這樣,我們就可以將系統內部的URI(比如ID)完全分離出來。

我們將傳入的URI與數據庫中的uri字段進行匹配,並從正確的類(控制器)或重定向中加載正確的函數。它也可以選擇向該功能發送參數。

讓我通過實際案例

+---------+---------+----------+----------+--------+ 
| uri  | class | function | new_uri | vars | 
+---------+---------+----------+----------+--------+ 
| faq  | support | faq  |   |  | 
+---------+---------+----------+----------+--------+ 
| sandwich| content | news  |   | 1  | 
+---------+---------+----------+----------+--------+ 
| banana |   |   | sandwich |  | 
+---------+---------+----------+----------+--------+ 

案例1: 用戶請求test.com/faq的URI路由器上找到URI =「常見問題解答」一根火柴,告訴系統diplay什麼支持類或控制器顯示中的faq()

案例2: 用戶請求test.com/sandwich這是一個新聞故事與ID 1.快捷所以URI路由器發送一個呼叫news()在內容類,我們可以找回ID 1從一個變量如$_GET['vars'][0]

案例3: 用戶請求test.com/banana,已經移動到test.com/sandwich因爲我們在香蕉產業是不是了。所以URI路由器有禮貌地發送301並將用戶重定向到正確的位置。

該方法有很多擴展的方法,例如,通過允許uri字段中的通配符等。希望它對您也有一定的價值。

+0

但是,如果我把我的物品當作$ item =「我的物品一」,而我可能匹配它的那個物品是:「我的物品一」,那麼這對我有什麼幫助? – santa

+0

那麼,你將不得不爲你想要的URL看起來做一些規則集。我已經決定剝離非單詞字符並用短劃線替換所有空格。所以我首先做一個初始替換,我用短劃線和幾個特殊字符替換空白,然後執行'preg_replace('/ [^ \ w - ]/i','',$ slug)''。結果是可讀性很好的URI,只要規則不改變,就應該匹配。 – jurgemaister

相關問題