htaccess правило перезаписи для красивого URL

Мне нужно превратить строку запроса следующим образом:

http://localhost/view.php?id=12345

В это:

http://localhost/12345

Но я также планирую иметь строку в конце URL-адреса для поисковых систем, например:

http://localhost/12345/NameOfTheSkin

Примерно так, как Wowhead делает свои URL-адреса:

http://www.wowhead.com/item=49623/shadowmourne

Обратите внимание, как вы можете изменить строку «shadowmourne» на что угодно, и она по-прежнему будет указывать на идентификатор элемента 49623.

В принципе, мне нужно, чтобы строка в конце игнорировалась.

Любая помощь приветствуется, ура. :)


person Josh    schedule 16.05.2011    source источник


Ответы (1)


RewriteRule ^/(\d+)/?.*$ /view.php?id=$1 [L]

Это перепишет http://host/1234/some-text и http://host/1234 в http://host/view.php?id=1234.

Детальное объяснение:

^   -- matches at the start of the string
(   -- start match group
\d+ -- match one or more digits
)   -- end match group
/?  -- match 0 or 1 slash
.*  -- match any character 0 or more times
$   -- matches at the end of the string

Посетите regular-expressions.info для полного руководства по регулярному выражению.

person Timofey Stolbov    schedule 16.05.2011
comment
Почему это работает? Не могли бы вы включить более подробную информацию/объяснение? - person Joe; 16.05.2011
comment
@Joe Первая часть правила перезаписи ^/(\d+)/?.*$ представляет собой регулярное выражение, которое извлекает цифры (\d+) из шаблона строки запроса /xxx/?.*. Где /? пытается соответствовать косой черте, а .* соответствует выворачиванию на конец строки $. Затем он вставляется в запрос для view.php как $1, что означает часть, совпадающую с первой скобкой (цифры). - person Captain Giraffe; 16.05.2011