(Рекурсивно) Регулярное выражение для файла .htaccess - PullRequest
1 голос
/ 23 февраля 2010

Я пытаюсь изменить свою веб-страницу, которую я в настоящее время использую QueryStrings для отображения страниц, и хочу изменить URL-адреса веб-сайтов на "дружественные для поисковых систем".

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

http://someaddress.bla/index.php?lang=en&rootCategory=$rootCaty&leafCategory=$leafCat

до

http://someaddress.bla/en/$rootCat/$sub-category/$sub-category2/.../$leafCat

Категории хранятся в базе данных рекурсивно, поэтому я должен отображать каждый уровень категории в URL. Но мне нужна только последняя категория в URL. например, категория может быть корневой категорией, такой как:

http://someaddresss.bla/en/Company

, который в данный момент отображается с URL:

http://someaddress.bla/?lang=en&RootCategory=Company

или это может быть подкатегория, такая как:

http://someaddress.bla/en/Company/AboutUs

, который в данный момент отображается с URL:

http://someaddress.bla/?lang=en&RootCategory=Company&LeafCategory=AboutUs

или может быть листом вроде:

http://someaddress.bla/en/Company/AboutUs/Staff/.../Steve где "Стив" - лист рекурсии. Эта страница в настоящее время отображается с URL:

http://someaddress.bla/?lang=en&RootCategory=Company&LeafCategory=Steve

Я не мог написать регулярное выражение, чтобы справиться с этой ситуацией, любая помощь будет оценена. Спасибо!

Ответы [ 2 ]

2 голосов
/ 23 февраля 2010
RewriteRule ^/?([^/]+)/([^/]+)/?$ /?lang=$1&RootCategory=$2
RewriteRule ^/?([^/]+)/([^/]+)(/.+)?/([^/]+)/?$ /?lang=$1&RootCategory=$2&LeafCategory=$4
0 голосов
/ 23 февраля 2010

Вы можете сопоставить последний элемент в URL, привязав к $ (символ «конец строки»):

([^/]+)$

будет соответствовать и захватывать последний набор символов в URL, который не является / символом.

...