2013-06-20 5 views
0

У меня проблема с htaccess rewrite_mode. , когда я использую несколько переменных $ _GET в этих правилах, первая переменная получает файл имен, который является первой переменной $ _GET. пожалуйста помогите.htaccess и RewriteRule Chain

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) 

это вывод для "localhost/ts/1/2/3 /"

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

это выход для "местных хост/ц/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