2012-01-30 6 views
0

У меня есть следующее .htaccess в папке/бэкэнда:

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

Когда я посещаю http://mysite.com/backend/test/pages/dashboard.php $ _GET [ «путь»] возвращает «индекс» строки, а не «тест /pages/dashboard.php ", как ожидалось.

Что я делаю неправильно? Я не могу понять это.

+0

Вы используете какой-либо фреймворк или просто простой PHP? – jprofitt

+0

Это простой PHP на VPS. Может ли это быть какой-то проблемой конфигурации apache? Я не могу ничего найти при использовании Google. – OMGKurtNilsen

+0

Использует ли 'var_dump ($ _ GET)' или 'var_dump ($ _ REQUEST)' что-нибудь полезное? – jprofitt

ответ

2

Решил это, добавив следующее правило перед другим.

RewriteRule  ^index.php$ - [L] 

TerryE отметил:

В контексте perdir переписывающийся двигатель петли через .htaccess файлы до тех пор, пока он получает чистый проход.

mod_rewrite был другими словами, переписывая URL дважды, потому что результат первого переписывания также соответствовал правилу.

+0

В контексте perdir механизм перезаписи проходит через файлы .htaccess, пока не получит чистый проход. Дополнительное правило позволяет этому «последнему пропуску» произойти на второй итерации перед повторением предыдущего предыдущего правила, которое могло бы привести к другим причинам: «backend/test/pages/dashboard.php» -> 'backend/index.php? Path = test/pages/dashboard.php' -> 'backend/index.php? path = index' ->' backend/index.php? path = index' (завершается, потому что не изменяется). Поймите мое объяснение? – TerryE

+0

Да, я в конце концов понял, что он делал переписывание более одного раза. Добавление этого нового правила с помощью [L] предотвращает переписывание файла index.php. В конце концов я изменил расширение в матче на .html и исправил его тоже. – OMGKurtNilsen

+0

Возможно, вы также добавили 'RewriteCond $ 1! = Index' в существующее правило, чтобы предотвратить его запуск в этих обстоятельствах – TerryE

Смежные вопросы