использование Apache mod rewrite для разбора SEO дружественных URL-адресов
Как мне преобразовать что-то вроде
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 ответа:
Это должно работать для обоих:
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]
Убедитесь, что модуль mod_rewrite apache включен, затем:
RewriteEngine on RewriteRule ^/profile/([^/]*)/([^/]*)$ /profile.php?id=$1 [L] RewriteRule ^/store/([^/]*)/([^/]*)$ /store.php?id=$1 [L]
Вы, вероятно, захотите обработать обратное условие в PHP, особенно с конечной частью имени (так как этого нет в исходном URL). Если вы хотите обработать его в mod_rewrite без имени, убедитесь, что вы не закончите в двойном переписывании (зависит от порядка ваших правил). Кроме того, вы можете использовать переключатель [L] (last), чтобы сделать правило последним (последующие правила будут пропущены, если есть совпадение).
Кроме того, можно сделать более общее правило перезаписи, но вам нужно будет тщательно продумать другие URL-адреса, которые могут быть затронуты.