используя mod_rewrite от apache для анализа 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?

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

 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 

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

 RewriteRule ^((profile|store))/(\d+).*$ $1.php?id=$2 [L] 

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

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

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

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