Правило переписывания Apache (Regex) - PullRequest
0 голосов
/ 17 июля 2010

Я использую Apache, и мне нужно переписать URL типа:

/ a / b / c / d / border / stuff *

, чтобы:

/ border / a_b_c_d / stuff *

Мне нужно переписать первый Uri во второй формат.

Количество элементов перед '/border 'являются переменными, и я хочу заменить все косые черты (' / ') между элементами на' _ '

Граничное слово всегда одинаково.

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

Второе правило, которое мне кажется, что-то вроде ^ / (. *?) / \ bboundary \ b на / border / $ 1

Можно ли добиться того, чего я хочу?!

Как?!

Спасибо.

РЕДАКТИРОВАТЬ

Я хочу сопоставить до первого слова границы, возможно иметь URL вроде

/ a / b / c / d / border / border

РЕДАКТИРОВАТЬ

Гамбо спасибо за вашу помощь

основываясь на ваших правилах перезаписи, мне удалось его создать.

1 Ответ

3 голосов
/ 17 июля 2010

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

RewriteRule ^/([^/]+)/(.+)/boundary/([^/]+)$ /$1_$2/boundary/$3 [N]
RewriteRule ^/([^/]+)/boundary/([^/]+)$ /boundary/$1/$2 [L]

Будьте осторожны с первыми правилами с флагом N , вызывающим внутреннюю перезапись без увеличения внутреннего счетчика. Так что, скорее всего, у вас бесконечная рекурсия.


Изменить После того, как вы изменили свой вопрос:

RewriteCond $1 !=boundary
RewriteCond $2 !=boundary
RewriteRule ^/([^/]+)/([^/]+)(/.*)?$ /$1_$2$3 [N]
RewriteRule ^/([^/]+)/boundary(/.*)$ /boundary/$1$2 [L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...