Как мне конвертировать что-то вроде
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-адресах, которые могут быть затронуты.