используя apache mod_rewrite для анализа SEO-дружественных URL - PullRequest
3 голосов
/ 10 июня 2009

Как мне конвертировать что-то вроде

me.com/profile/24443/quincy-jones

до

me.com/profile.php?id=24443

или что-то вроде

me.com/store/24111/robert-adams

до

me.com/store.php?id=24111

с mod_rewrite?

Могу ли я сделать обратное преобразование также с помощью mod_rewrite или мне придется анализировать его через PHP?

Ответы [ 2 ]

9 голосов
/ 10 июня 2009

Это должно работать для обоих:

RewriteEngine on
RewriteRule ^([^/]+)/([^/]+).*$ $1.php?id=$2 [L]

Пояснение:

^           - beginning of the string
([^/])      - first group that doesn't contain /
              will match both 'profile' and 'store'
              will also be referenced by $1 later
/           - first slash separator
([^/])      - second group, id in your case
              will be referenced by $2
.*          - any ending of the request uri
$           - end of request string

Вы также можете сделать его более точным, чтобы только два запроса были переписаны и только цифры принимались в качестве идентификатора:

RewriteRule ^((profile|store))/(\d+).*$ $1.php?id=$2 [L]
2 голосов
/ 10 июня 2009

Убедитесь, что у вас включен модуль ap_ mod_rewrite, затем:

RewriteEngine on

RewriteRule ^/profile/([^/]*)/([^/]*)$  /profile.php?id=$1 [L]

RewriteRule ^/store/([^/]*)/([^/]*)$    /store.php?id=$1 [L]

Возможно, вы захотите обработать обратное условие в PHP, особенно с конечной частью имени (так как этого нет в исходном URL). Если вы хотите обработать его в mod_rewrite без имени, убедитесь, что вы не получите двойную перезапись (зависит от порядка ваших правил). Также вы можете использовать переключатель [L] (последний), чтобы сделать правило последним использованным (последующие правила будут пропущены при совпадении).

Кроме того, можно создать более общее правило перезаписи, но вам нужно будет тщательно продумать другие URL-адреса, которые могут быть затронуты.

...