使用apache的mod_rewrite解析SEO友好URL

时间:2009-06-10 13:14:23

标签: php .htaccess mod-rewrite seo

如何转换

之类的内容
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 个答案:

答案 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](最后一个)开关使规则成为最后一个使用的规则(如果匹配,将跳过后续规则)。

此外,可以制定更通用的重写规则,但您需要仔细考虑可能受影响的其他网址。