2013-06-20 118 views
0

我有一個htaccess rewrite_mode的問題。 當我在這些規則中使用多個$ _GET變量時,第一個變量獲取名爲第一個$ _GET變量的文件。請幫幫我。htaccess和RewriteRule鏈

RewriteEngine on 
RewriteBase /ts/ 
RewriteRule  ^(.+)/$     ts.php?a=$1 [C] 
RewriteRule  ^(.*)/(.+)/$    ts.php?a=$1&b=$2 [C] 
RewriteRule  ^(.*)/(.*)/(.+)/$  ts.php?a=$1&b=$2&c=$3 [C] 
RewriteRule  ^(.*)/(.*)/(.*)/(.+)/$ ts.php?a=$1&b=$2&c=$3&d=$4 [C,L] 

此輸出用於 「本地主機/ TS/1 /」

Array ([a] => 1) 

此輸出用於 「本地主機/ TS/1/2 /」

Array ([a] => ts.php [b] => 2) 

這是輸出for「localhost/ts/1/2/3 /」

Array ([a] => ts.php [b] => 2 [c] => 3) 

這是輸出爲「本地主機/ TS/1/2/3/4/5/6 /」

Array ([a] => ts.php/2/3 [b] => 4 [c] => 5 [d] => 6) 
+0

這是因爲在。重寫完成後,.htaccess上下文會將新的URL輸入到重寫過程中_again_ - 並且'ts.php?a = foo'匹配'^(。+)/'。你可以避免這個f.e.通過使用'RewriteCond'來簡單地排除現有文件的重寫。 – CBroe

回答

1

我不會用鏈條標誌,只是扭轉你的RewriteRules,如:

RewriteEngine on 

RewriteBase /ts/ 

RewriteRule  ^(.*)/(.*)/(.*)/(.+)/$ ts.php?a=$1&b=$2&c=$3&d=$4 [L] 
RewriteRule  ^(.*)/(.*)/(.+)/$  ts.php?a=$1&b=$2&c=$3 [L] 
RewriteRule  ^(.*)/(.+)/$    ts.php?a=$1&b=$2 [L] 
RewriteRule  ^(.+)/$     ts.php?a=$1 [L] 
+0

非常感謝,工作。 – user2504883