2011-04-24 19 views
3

我想創建一個mod_rewrite的是,當用戶進入,或它顯示的網址:使用mod_rewrite的URL變量和刪除空參數不使用時

www.example.com/var1/var2/var3/var4/ 

它輸出一樣

www.example.com?page=var1&cat=var2&subcat=var3&subsubcat=var4 

但如果在數量變量的改變,它仍然可以工作,所以變量可以是:

www.example.com/var1/ 
or 
www.example.com/var1/var2/ 
or 
www.example.com/var1/var2/var3/ 
or 
www.example.com/var1/var2/var3/var4/ 

如果我用下面的,它僅適用於www.example.com/var1/var2/var3/var4/而不是其他:

Options +FollowSymLinks RewriteEngine On RewriteBase/

RewriteRule ^([^&]+)/([^&]*)/([^&]*)/([^&]*)/$ /?page=$1&cat=$2&subcat=$3&subsubcat=$4 [L] 

如果我使用使用CHAINING下面的代碼,它可以作爲一個鏈在一定程度上,但問題是,對於

www.example.com/var1/var2/ 
www.example.com/var1/var2/var3/ 
www.example.com/var1/var2/var3/var4/ 

它輸出VAR1爲「/」,因此它被用下面的代碼忽略所述第一變量:

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/

RewriteRule ^([^&]+)/$ /?page=$1 [C] 
RewriteRule ^([^&]+)/([^&]*)/$ /?page=$1&cat=$2 [C] 
RewriteRule ^([^&]+)/([^&]*)/([^&]*)/$ /?page=$1&cat=$2&subcat=$3 [C] 
RewriteRule ^([^&]+)/([^&]*)/([^&]*)/([^&]*)/$ /?page=$1&cat=$2&subcat=$3&subsubcat=$4 [L] 

順序總是所以這應該是e ASY。我該如何做這項工作?

回答

2

也許我錯過了一些東西,但國際海事組織你不需要鏈接C標誌在這裏。請考慮以下規則:

RewriteEngine on 
Options +FollowSymlinks -MultiViews 

RewriteCond %{QUERY_STRING} !^page= [NC] 
RewriteRule ^([^/]+)/?$ /?page=$1 [L] 

RewriteCond %{QUERY_STRING} !^page= [NC] 
RewriteRule ^([^/]+)/([^/]*)/?$ /?page=$1&cat=$2 [L] 

RewriteCond %{QUERY_STRING} !^page= [NC] 
RewriteRule ^([^/]+)/([^/]*)/([^/]*)/?$ /?page=$1&cat=$2&subcat=$3 [L] 

RewriteCond %{QUERY_STRING} !^page= [NC] 
RewriteRule ^([^/]+)/([^/]*)/([^/]*)/([^/]*)/?$ /?page=$1&cat=$2&subcat=$3&subsubcat=$4 [L] 

我在所有規則中加入RewriteCond %{QUERY_STRING} !^page= [NC],以確保有無限循環。另外,我在每條規則的末尾添加了?,從而可以選擇尾部斜線。

以上所有規則在我的測試中都能正常工作。

+0

謝謝。我需要修正。我需要它與var2,var3和var4的不同字段選項一起工作。爲了能夠做出一個if-or-else來選擇哪個字段用於什麼變量並且說明區別。 例如,很容易區分每個變量這裏的字段: www.example.com?page=var1&cat=var2&subcat=var3&subsubcat=var4 www.example.com?othervar1=var1&othervar2=var2&othervar3=var3&othervar4= var4 但對於: www.example.com/var1/var2/var3/var4/ 該字符串要求能夠區分變量的哪個字段與mod_rewrite。 – 2011-04-25 07:39:49

+0

另外,您可以告訴我「-MultiViews」位在開始時意味着什麼,因爲我之前沒有遇到過這種情況? – 2011-04-25 07:40:42

+0

我實際上已經發布這個作爲另一個問題,因爲我以前無法回覆。要去這個新的問題,請點擊這個[鏈接](http://stackoverflow.com/questions/5776208/mod-rewrite-for-url-variables-removing-empty-parameters-and-using-more-than- 1fie)。謝謝。 – 2011-04-25 07:42:18