使用 apache 的 mod_rewrite 来解析 SEO 友好的 URL
Posted
技术标签:
【中文标题】使用 apache 的 mod_rewrite 来解析 SEO 友好的 URL【英文标题】:using apache's mod_rewrite to parse SEO friendly URL's 【发布时间】:2010-11-01 19:24:08 【问题描述】:我如何转换类似的东西
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 解析它?
【问题讨论】:
【参考方案1】:这应该适用于两者:
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]
【讨论】:
【参考方案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](最后一个)开关将规则设为最后使用的规则(如果匹配,则将跳过后续规则)。
此外,可以制定更通用的重写规则,但您需要仔细考虑可能受到影响的其他 URL。
【讨论】:
以上是关于使用 apache 的 mod_rewrite 来解析 SEO 友好的 URL的主要内容,如果未能解决你的问题,请参考以下文章
Apache2 - 使用 mod_rewrite 代理到另一个域
Debian/Ubuntu下安装Apache的Mod_Rewrite模块的步骤
使用 mod_rewrite 来修改 Confluence 6 的 URLs
使用 mod_rewrite 来修改 Confluence 6 的 URLs