Я пытаюсь найти совпадение с регулярным выражением и заменить его на файл .htaccess, но я не могу понять бит замены. Я думаю, что правильно понял часть спички, но, может быть, кто-то сможет помочь.
У меня есть этот URL- http://www.foo.com/MountainCommunities/Lifestyles/5/VacationHomeRentals.aspx
И я пытаюсь превратить это в это- http://www.foo.com/mountain-lifestyle/Vacation-Home-Rentals.aspx
(MountainCommunities / Образ жизни) / \ d / (. *) (. Aspx)
а затем я подумал, что у меня будет правило перезаписи, начинающееся так:
горный образ жизни / 2 доллара 3 доллара
но мне нужно взять то, что в этом случае находится в $ 2, и переписать его, чтобы поставить тире между словами с заглавными буквами. Теперь я в тупике.





Я не думаю, что то, что вы делаете с заглавными буквами, возможно с регулярным выражением ...
Лучше оставить тире в URL-адресе и удалить .aspx
например: http://www.foo.com/MountainCommunities/Lifestyles/5/Vacation-Home-Rentals
Для этого потребуется следующее правило:
^/MountainCommunities/Lifestyles/5/([^/]+)/\?([^/]+) /mountain-lifestyle/$1.aspx?$2 [I]
При этом также принимаются во внимание любые строки запроса, отправляемые на страницу.
Кстати: как вы используете .htaccess с IIS?
@ Гамбо: Конечно, это так. Я сейчас использую ISAPI_rewrite для таких вещей.
Я думаю, вам придется сделать это двумя битами ... Выньте 2 доллара, поставьте перед каждой заглавной буквой (кроме первой) знак -, затем используйте просто добавьте результат в http://www.foo.com/mountain-lifestyle/ с .aspx на конце.
Попробуй это:
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 и Директива LimitInternalRecursion для Apache ≥ 2.1).
Вы можете использовать регулярное выражение «([AZ])» в среднем бите «VacationHome», заменив его регулярным выражением «- $ 1» - это даст вам «-Vacation-Home-Rentals» - тогда вы можете просто отрубить первый символ и вставьте первую часть URL-адреса спереди и .aspx в конец.
Думаю, я не совсем понимаю, что вы пытаетесь сделать. Почему вы не можете просто искать:
http://www.foo.com/MountainCommunities/Lifestyles/5/VacationHomeRentals.aspx
и замените его на:
http://www.foo.com/mountain-lifestyle/Vacation-Home-Rentals.aspx?
Или это конкретный пример узора, который вы пытаетесь трансформировать?
Я думаю, что основное регулярное выражение было написано другими, но для соответствия имени запроса для размещения дефисов (при условии, что все имена файлов имеют представление с тремя именами в верблюжьем корпусе 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, так как у меня не было возможности проверить его рекурсию. Техника рекурсии определенно является лучшей и наиболее удобной для любого сценария.
Строка запроса не является частью пути URL и поэтому не может быть проверена в директиве RewriteRule.