2010-06-20 89 views
1

嘿,我怎麼能減少這樣的:的mod_rewrite在.htaccess

www.example.com/index.php?page=viewblog&category=awesome 

到這一點:

www.example.com/blog/awesome 

上面列出了所有該類別中的博客文章,但我也想範圍添加在它結束時,文章的標題爲好,像這樣:

www.example.com/index.php?page=viewblog&category=awesome&post=why-trees-are-green 

而這需要下縮短:

www.example.com/blog/awesome/why-trees-are-green 

任何想法,任何人?感謝提前:)

+0

等待,您是否試圖將「漂亮」的URL映射到PHP頁面?或者將使用舊版index.php網址的訪問者重定向到新的「漂亮」網址? – Artelius 2010-06-20 10:40:35

回答

2
RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-f  
RewriteRule blog/([^/]+)/?$ index.php?page=viewblog&category=$1 [L] 
RewriteRule blog/([^/]+)/([^/]+)/?$ index.php?page=viewblog&category=$1&post=$2 [L] 

條件確保所請求的URL是不是實際的文件,要服務(CSS,圖像等)

然後,每級一個規律,第一個將重寫 http://yourserver.com/blog/whateverhttp://yourserver.com/index.php?page=viewblog&category=whatever

第二個將重寫http://yourserver.com/blog/whatever/wheneverhttp://yourserver.com/index.php?page=viewblog&category=whatever&post=whenever

如果您需要更多關卡,請相應地添加更多規則。

+0

太棒了。感謝您的全面和快速的回​​答:) – Tim 2010-06-20 11:16:14

+0

它似乎沒有RewriteCond工作。我沒有使用它,並且工作正常。 RewriteCond做什麼? – Simon 2010-06-20 12:47:23

+1

@Syom:答案的第一行解釋了它。您通常想要返回文件,如果它們存在,而不是重寫這些請求。示例:假設您在那裏沒有條件(它確保所請求的資源不存在)上的server/blog/blogimage.png上有一個映像,那麼您的請求將被重寫爲server/index.php?page = viewblog&category = blogimage.png,而不是實際返回圖像。 – 2010-06-20 15:33:23

0

像這樣?

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^./]+)/([^./]+)$ index.php?page=view$1&category=$2 [L] 
RewriteRule ^([^./]+)/([^./]+)/([^./]+)$ index.php?page=view$1&category=$2&post=$3 [L]