2011-11-06 40 views
0

希望你們中的一些.htaccess大師能夠幫助我解決這個問題。我以前從來沒有用過任何時間搞亂.htaccess,所以我有點迷路。如何在URL重寫中使用外部信息?

基本上我想採取這樣的鏈接作爲 example.com/index.php?id=3並將其轉換爲http://example.com/pagename/

,這樣的鏈接轉換爲http://example.com/directory/3或類似的規定,我可以很容易地改變它行,但我真的不明白人們是如何完成我期待的改變的。我知道WordPress的做法與他們的網址類似,但他們如何訪問帖子名稱信息?

回答

0

WordPress的重寫,不能解決的文件或目錄index.php一切做它,它看起來像這樣:

RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 

而且index.php文件讀取請求的URI,並計算出該怎麼做它。與此同時,wordpress知道這些網址正在被重寫,因此它會呈現帶有簡潔的SEO友好網址的網頁,例如http://example.com/pagename/

對於你的榜樣,mod_rewrite的本身是不會要能夠知道,除非你硬編碼了一堆個人的RewriteRules的ID = 3相當於頁面名。你可以做什麼使它的index.php接受頁面名稱所以你的規則將是這個樣子:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ /index.php?page=$1 [L] 

現在就看你的內容產生清潔SEO友好的URL。在內容管理系統中,頁面本身通常以某種類型的ID存儲在數據庫中。在2011年10月10日創建的數據庫中將ID標識爲「5」的頁面稱爲「Test Page」。當CMS需要生成鏈接時,它會查找數據庫並將鏈接構建爲/2011/10/Test_Page

因此,當你轉到首頁時,index.php會生成指向其所有頁面的鏈接,並且對於「測試頁」,該鏈接將顯示/2011/10/Test_Page,當有人點擊該鏈接時,apache會使用一條規則RewriteRule ^([0-9]+)/([0-9]+)/(.+)$ /index.php?year=$1&month=$2&title=$3 [L]將URL重寫爲/index.php?year=2011&month=10&title=Test_Page。 index.php腳本在數據庫中查找正確的頁面並將其返回給瀏覽器。這對每個CMS都會有所不同。本質上,.htaccess不會知道存儲在數據庫中的任何內容,但它可以重寫鏈接,以便將所需信息(如「id」或「page」)傳遞給腳本。這是由腳本來決定什麼頁面返回生成清潔SEO友好的鏈接在該頁面上。

+0

好的,我們假設我選擇了WP路由並將所有內容重寫爲'index.php'。我仍然不明白如何將URL重寫爲更清晰的內容。我查看了Wordpress中的'rewrite.php'文件,看看它們是如何做到的,但當它隱藏在複雜的CMS中的2000行文件中時,理解困難的概念並不容易。 –

+0

看我的編輯。這完全取決於你如何產生乾淨的SEO友好鏈接。這不是.htaccess或apache的一部分。 –