Проблема с htaccess и строкой запроса - PullRequest
0 голосов
/ 27 ноября 2010

Я пытаюсь переписать некоторые URL, используя mod_rewrite, но я получаю разные результаты из двух похожих правил.Вот мой код:

Первое правило :

RewriteEngine On  
RewriteBase /
RewriteRule ^api/(.*?)$            index.php?p=$1 [L]

Со входом example.com / api / test1 / test2 / test3 Iполучить следующий вывод в PHP:

Array ( [p] => test1/test2/test3 ) 

Второе правило:

RewriteEngine On  
RewriteBase /
RewriteRule ^/(.*?)$            index.php?p=$1 [L]

или

RewriteRule ^(.*?)$            index.php?p=$1 [L] #test

При вводе example.com / test1 / test2 / test3 Я получаю следующий вывод в PHP:

Array ( [p] => index.php ) 

Это не то, что я ожидал, я думал, что это будет [p] => test1/test2/test3, как с первымправить.Что я могу сделать, чтобы результаты были одинаковыми?

Заранее спасибо.

1 Ответ

0 голосов
/ 27 ноября 2010

Ваше второе правило,

RewriteRule ^(.*?)$ index.php?p=$1 [L]

содержит тестовый шаблон, который соответствует тому, что вы переписываете (index.php). После первоначальной перезаписи / test1 / test2 / test3 в index.php? P = test1 / test2 / test3 выполняется другая перезапись, преобразующая index.php (со строкой запроса p = test1 / test2 / test3 ) до index.php? p = index.php .

Вы должны подготовить правило, чтобы второе перезапись не выполнялась. Один из способов сделать это - проверить, существует ли цель запроса:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ index.php?p=$0
...