2010-03-21 65 views
1

我做了大量的方法來弄清楚如何使這個國防部重寫,但O完全不成功。mod用3個參數重寫?

我想在下面的方法重寫的.htaccess代碼:

  • /apple/upcoming/2/handler.php?topic=apple&orderby=upcoming&page=2

這是很容易做到的,但問題是,所有的參數不需要這樣的鏈路具有不同程度的參數這樣每次:

  • /apple/popular/2/handler.php?topic=apple&orderby=popular&page=2
  • /apple/2/handler.php?topic=apple&orderby=&page=2
  • /all/popular/2/handler.php?topic=all&orderby=popular&page=2
  • /apple/upcoming//handler.php?topic=apple&orderby=upcoming&page=

所以簡單地說,URL有一個靜態的3個階可選參數:(主題)(排序依據)(頁)

注意:ORDERBY參數可以是「流行」或「即將到來」或什麼都不是。

感謝

回答

1

我建議重定向域名之後的一切(/蘋果/即將到來/ 2)的index.php,並從那裏使用PHP解析URL並調用相應的功能。

+1

+1您不能使用國防部重寫改寫一個網址沒有查詢。 – 2010-03-21 00:07:18

+0

任何modrewrite代碼將域名後面的所有內容重定向到handler.php?everything = XXXX?謝謝 – Ryan 2010-03-21 00:21:57

+0

@Sandeep Bansal:這顯然是錯誤的。你確定可以使用mod_rewrite來重寫每一個請求而不用觸及查詢。 – Gumbo 2010-03-22 11:06:53

1

這應該工作:

RewriteRule  ^([0-9]*)/?$ handler.php?topic=&orderby=&page=$1 [L] 
RewriteRule  ^(upcoming|popular)/([0-9]*)/?$ handler.php?topic=&orderby=$1&page=$2 [L] 
RewriteRule  ^([^/]*)/([0-9]*)/?$ handler.php?topic=$1&orderby=&page=$2 [L] 
RewriteRule  ^([^/]*)/(upcoming|popular)/?$ handler.php?topic=$1&orderby=$2&page= [L] 
RewriteRule  ^([^/]*)/(upcoming|popular)/([0-9]*)/?$ handler.php?topic=$1&orderby=$2&page=$3 [L] 

你應該簡單地聲明首選順序重寫。

0

對於你上面有規則規定應該工作的情況:

RewriteRule  ^([^/]+)/(\d+)/?$ handler.php?topic=$1&orderby=&page=$2 [L] 
RewriteRule  ^([^/]+)/([^/]+)/?$ handler.php?topic=$1&orderby=$2&page= [L] 
RewriteRule  ^([^/]+)/([^/]+)/(\d+)/?$ handler.php?topic=$1&orderby=$2&page=$3 [L]