Нужна помощь по переписыванию URL - PullRequest
0 голосов
/ 12 февраля 2009

У меня простой вопрос, но я не могу найти ответ. В настоящее время я работаю над переписыванием URL-адреса для веб-сайта, но столкнулся с проблемой. В настоящее время самое основное правило, которое у меня есть, выглядит примерно так:

RewriteRule ^([a-zA-Z]+)/(([a-zA-Z]+)/?$ index.php?mod=$1&com$2

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

website.com/asdf/jkl/id/5/page/2 должно стать website.com/index.php?mod=asdf&com=jkl&id=5&page=2

website.com/qwer/yuio/search/keyword/sort/alpha должно стать website.com/index.php?mod=qwer&com=yuio&search=keyword&sort=alpha

Возможно ли это? Я мог бы действительно использовать некоторую помощь здесь ... Спасибо! :)

Ответы [ 2 ]

3 голосов
/ 12 февраля 2009

В зависимости от того, какой язык / каркас вы используете, может быть проще поместить переписывание / диспетчеризацию в сценарий, чем пытаться делать все в mod_rewrite.

Например, если вы использовали PHP, укажите URL:

http://www.example.com/asdf.php/jkl/id/5/page/2

скрипт в asf.php может прочитать переменную PATH_INFO, разбить ее на косые черты и записать значения в ожидаемое место в $ _REQUEST.

Тогда все, что вам нужно, это одно простое правило переписывания, чтобы исключить «.php».

0 голосов
/ 12 февраля 2009

Вы можете использовать рекурсивное правило:

RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)/?$ index.php?mod=$1&com$2 [L,QSA]
RewriteRule ^([^/]+/[^/]+)/([^/]+)/([^/]+)/?(.*) $1/$4?$2=$3 [QSA]

Но было бы проще разобрать путь запроса с помощью PHP.

...