RegEx матч заменить помощь - PullRequest
       16

RegEx матч заменить помощь

3 голосов
/ 20 января 2009

Я пытаюсь выполнить сравнение с регулярным выражением и заменить файл .htaccess, но не могу понять, какой бит заменить. Я думаю, что у меня есть правильная часть матча, но, возможно, кто-то может помочь.

У меня есть этот URL- http://www.foo.com/MountainCommunities/Lifestyles/5/VacationHomeRentals.aspx

И я пытаюсь превратить это в это- http://www.foo.com/mountain-lifestyle/Vacation-Home-Rentals.aspx

(MountainCommunities / Lifestyles) / \ д / (. *) (. ASPX)

и тогда я решил, что у меня будет правило перезаписи, начинающееся так:

горный образ жизни / $ 2 $ 3

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

Ответы [ 6 ]

4 голосов
/ 20 января 2009

Я думаю, вам придется сделать это в два бита ... Выньте 2 доллара, поставьте перед каждой заглавной буквой (кроме первой) знак -, а затем просто добавьте результат к http://www.foo.com/mountain-lifestyle/ с помощью .aspx в конце.

2 голосов
/ 20 января 2009

Попробуйте это:

RewriteRule ^(([A-Z][a-z]+-)*)([A-Z][a-z]+)(([A-Z][a-z]+)+)(\.aspx)?$ /$1$3-$4 [N]
RewriteRule ^([A-Z][a-z]+-)+[A-Z][a-z]+$ /$0.aspx [R=301]

Обратите внимание, что mod_rewrite использует внутренний счетчик для обнаружения и предотвращения бесконечных циклов. Таким образом, ваш URL может не содержать слишком много слов, которые необходимо преобразовать (см. MaxRedirects параметр для Apache <2.1 и <a href="http://httpd.apache.org/docs/2.1/mod/core.html#limitinternalrecursion" rel="nofollow noreferrer">LimitInternalRecursion директива для Apache ≥ 2.1).

1 голос
/ 20 января 2009

Я думаю, что основное регулярное выражение было написано другими, но для соответствия имени запроса для размещения тире (при условии, что все имена файлов имеют представление из трех названий в верблюжьей оболочке, как ala 'VacationHomeRentals.aspx':

RewriteRule: ^/MountainCommunities/Lifestyles/\d+/([A-Z][a-z]+)([A-Z][a-z]+)([A-Z][a-z]+)\.aspx$ /mountain-lifestyle/$1-$2-$3.aspx

Это ограниченная версия ответа @ Gumbo, так как у меня не было возможности проверить его рекурсию. Техника рекурсии, безусловно, лучшая и наиболее подходящая для любого сценария.

1 голос
/ 20 января 2009

Вы можете использовать регулярное выражение "([AZ])" в среднем бите "VacationHome", заменив его регулярным выражением "- $ 1" - Это даст вам "-Vacation-Home-Rentals" - Тогда вы можете просто отрежьте первый символ и вставьте первую часть URL спереди, а .aspx в конец.

1 голос
/ 20 января 2009

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

Вам бы лучше сохранить тире в URL и удалить .aspx

Например: http://www.foo.com/MountainCommunities/Lifestyles/5/Vacation-Home-Rentals

Для этого потребуется следующее правило:

^/MountainCommunities/Lifestyles/5/([^/]+)/\?([^/]+)   /mountain-lifestyle/$1.aspx?$2 [I]

Это также учитывает любые строки запросов, которые отправляются на страницу.

Кстати: как вы используете .htaccess с IIS?

0 голосов
/ 20 января 2009

Не думаю, что понимаю, что вы пытаетесь сделать. Почему вы не можете просто найти:

http://www.foo.com/MountainCommunities/Lifestyles/5/VacationHomeRentals.aspx

и замените его на:

http://www.foo.com/mountain-lifestyle/Vacation-Home-Rentals.aspx?

Или это конкретный пример паттена, который вы пытаетесь трансформировать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...