2009-08-22 3 views
0

У меня есть правило, которое получает до трех частей, разделенных/(косой чертой). Они представляют собой /приложение/контроллер/действие, но они не являются обязательными, что означает /, /приложение, /приложение/контроллер работы, а также.Проблема Apache modrewrite htaccess

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

RewriteRule ^(.*)$ frontend/$1 

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

А также, я хотел бы, что это правило не побежал, если текущий URL начинается уже с внешнего интерфейса /, я имею в виду что-то вроде этого:

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

Или это могло быть сделано более элегантно с RewriteCond?

Спасибо!

ответ

2

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

RewriteCond $0 !^frontend/ 
RewriteRule .* frontend/$0 [L] 
+1

Спасибо !!! Кажется, это работает. Но можете ли вы быстро объяснить, почему моя работа не работает или какая разница между вашим и моим solutin? $ 0 означает весь запрос, не так ли? – treznik

+1

Ваше решение, вероятно, вызывает бесконечный цикл. Но мое правило исключает любое совпадение, начинающееся с 'frontend /', которое должно быть переписано на 'frontend/...'. И, да, '$ 0' содержит совпадение всего шаблона. – Gumbo

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