Apache modrewrite проблема с htaccess

У меня есть правило, которое состоит из трех частей, разделенных косой чертой / (косая черта). Они представляют собой /app/controller/action, но являются необязательными, что означает /, /app, /app/controller< /strong> тоже работает.

Дело в том, что я хочу другое правило перед этим, которое установило бы приложение по умолчанию как «интерфейс», и я думаю, что оно должно выглядеть так:

RewriteRule ^(.*)$ frontend/$1

Однако, если у меня есть URL-адрес /part1, все в порядке, и он принимается как /frontend/part1. Однако, если URL-адрес содержит / (косая черта), например /part1/part2 , я получаю внутреннюю ошибку 500. Если я уберу это правило, первое будет работать с /frontend/part1/part2, так что проблема в этом правиле. Кажется, что $ 1 не принимает в нем косую черту. Это известный факт?

И еще, хотелось бы, чтобы это правило не запускалось, если текущий url уже начинается с frontend/, я думаю примерно так:

RewriteRule ^frontend(/.*)?$ frontend$1 [S=1]

Или это можно сделать более элегантно с помощью RewriteCond?

Спасибо!


person treznik    schedule 22.08.2009    source источник


Ответы (1)


Попробуйте это правило:

RewriteCond $0 !^frontend/
RewriteRule .* frontend/$0 [L]
person Gumbo    schedule 22.08.2009
comment
Спасибо!!! Кажется, это работает. Но не могли бы вы быстро объяснить, почему мой раствор не работал или в чем разница между вашим и моим раствором? $0 означает весь запрос, верно? - person treznik; 22.08.2009
comment
Ваше решение, вероятно, вызывает бесконечный цикл. Но мое правило исключает любое совпадение, начинающееся с frontend/, которое должно быть переписано на frontend/…. И да, $0 содержит совпадение всего шаблона. - person Gumbo; 22.08.2009