如何转换
之类的内容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解析?
答案 0 :(得分:9)
这应该适用于:
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]
答案 1 :(得分:2)
确保启用了mod_rewrite apache模块,然后:
RewriteEngine on
RewriteRule ^/profile/([^/]*)/([^/]*)$ /profile.php?id=$1 [L]
RewriteRule ^/store/([^/]*)/([^/]*)$ /store.php?id=$1 [L]
您可能希望在PHP中处理反向条件,尤其是使用尾随名称部分(因为它不在原始URL中)。如果你想在没有名字的情况下在mod_rewrite中处理它,请确保你没有最终进行双重写(取决于规则的顺序)。此外,您可以使用[L](最后一个)开关使规则成为最后一个使用的规则(如果匹配,将跳过后续规则)。
此外,可以制定更通用的重写规则,但您需要仔细考虑可能受影响的其他网址。