2009-01-27 53 views
0

什麼會做這樣的的.htaccess在任何長度

/mypage/ --> /index.php?page=mypage 
/mypage/param1/value1/ -->index.php?page=mypage&params=param1/value1 

東西隨着潛在無限數量的參數,有效的.htaccess規則?

謝謝。

+0

那個女孩,你在你的臉書「主頁」上是霍特! – 2009-01-27 20:14:05

回答

4

最好是到/我的空間後/整個零件傳遞作爲參數去PHP腳本,並有將其解碼:

RewriteRule ^mypage/(.*) index.php?page=mypage&params=$1 [L,NC,QSA] 

另外如果你想頁面是動態的:

RewriteRule ^([^/\.]+)/(.*) index.php?page=$1&params=$2 [L,NC,QSA] 

RewriteRule ^([^/\.]+)(/(.*))? index.php?page=$1&params=$3 [L,QSA] 

編輯
加了Cal的建議,謝謝Cal。

編輯
如果我正確理解你的評論:(如果沒有請解釋)。你可以只使用一個開關語句的默認動作是一樣的頁面變量索引操作:

switch($_GET['page']){ 
case 'mypage': 
    doMyPageStuff(); 
break; 
case 'foo': 
    doFooStuff(); 
break; 
case 'index': 
default: 
    doIndexStuff(); 
break; 
} 
+0

第二種方法是我需要更多的方法,但是如何忽略mypage之後的/? – 2009-01-27 20:16:20

1
RewriteRule ^([^/]+)/(.+)/?$ index.php?page=$1&params=$2 

或非常相似 - 沒有拿到手頭的服務器來檢查!

0

我看到這已經有一個可以接受的答案,但我相信下面將只使用mod_rewrite來做你想做的事情。

RewriteCond %{QUERY_STRING} ^(.*)$ 
RewriteRule ^(.*/)([^/]+)/([^/]+) $1?$2=$3&%1 [L] 
RewriteCond %{QUERY_STRING} ^(.*)$ 
RewriteRule ^([^/]+)/ $1.php?%1 [L] 

它的工作原理是因爲mod_rewrite以遞歸方式運行。也就是說,在每次重寫之後,新的URL將被再次處理。每次通過時,結尾的兩個值都變成查詢參數並添加到查詢字符串中。

這將改寫以下

/mypage/param1/val1/param2/val2/param3/val3/...  ---> 
/mypage.php?param1=val1&param2=val2&param3=val3&... 

當只有一個剩餘參數停止。它將採用第一個「參數」並用該名稱調用.php文件。 param/val對的數量沒有限制。

-
BMB

1

這裏是我的建議:

RewriteRule ^([^/]+)/(([^/]+/[^/]+(/[^/]+/[^/]+)*)/)?$ /index.php?page=$1&params=$3 [L] 

這是不是很漂亮,但exaclty按照您的要求。它只允許以下形式的路徑:

/mypage/ 
/mypage/param1/value1/ 
/mypage/param1/value1/param2/value2/ 
/mypage/param1/value1/param2/value2/param3/value3/ 
/mypage/param1/value1/param2/value2/param3/value3/param4/value4/ 
…