2008-08-16 80 views
5

我經常看到(重寫的)沒有ID的網址,就像一些WordPress的安裝。達到此目的的最佳方法是什麼? 例如: site.com/product/some-product-name/ 也許在緩存中保存頁面名稱和ID數組,以避免每個頁面請求上的數據庫查詢? 如何避免衝突,以及使用沒有ID的URL的其他問題?沒有ID的網址

回答

3

使用一個ID提出了相同的難題,真的 - 你只是在數據庫中檢查一個不同的值。上述URL的「某些產品名稱」部分也是獨一無二的。有些人稱他們爲slu((Wordpress,也是永久鏈接)。因此,不是查詢具有特定ID的行的數據庫,而是查詢數據庫中具有特定段落的行。您不需要知道該ID即可檢索該記錄。

1

只要產品名稱是唯一的,它不應該是一個問題。只要該列被索引,就不會再需要(至少不重要)通過唯一名稱而不是數字ID來查找產品。

+0

那麼,它會花費更長的時間,但它仍然足夠快,不在乎。 – 2017-11-24 21:12:40

1

Wordpress在slug的wp_posts表中有一個字段。當你創建帖子時,它會在帖子標題中創建一個塊(如果這是你配置的方式),用破折號替換空格(或者我認爲你可以將它設置爲下劃線)。它也取出了撇號,逗號或者其他東西。我相信它也限制了slu overall的整體長度。

因此,簡而言之,它不會將URL動態解碼爲帖子的標題 - 表中有一個字段直接與帖子名稱的URL版本相匹配。

1

正如你可能會或可能不知道的,這些URL將被重寫爲Apache的mod_rewrite模塊。如此處所述,Wordpress在後臺爲消息標題或帖子名稱分配子彈。

但是,要回答您的問題,您要描述的是Wordpress的「Pretty Permalinks」功能,您可以在Wordpress codex中瞭解關於它的更多信息。較新版本的Wordpress在內部進行重新編寫(而不是.htaccess編輯,wp_rewrite)。這就是爲什麼你會看到任何永久鏈接結構的規則集。

雖然,如果你做一些挖掘,你可以找到舊的重寫規則。例如:

RewriteRule ^([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$ /index.php?year=$1&monthnum=$2&day=$3 [QSA,L] 

將採取URL像/2008/01/01/並將其引導至/index.php?year=2008&monthnum=01&day=01(並加載日期類別)。

但是,如前所述,像product-name一個頁面存在只有因爲WordPress的已經消毒的文章標題並將其存儲在數據庫中的字段。