mod_rewrite的

时间:2009-06-21 15:26:28

标签: php mod-rewrite seo

我目前的代码是这样的

store.php?storeid=12&page=3

我想把它翻译成类似的东西

mysite.com/roberts-clothing-store/store/12/3

等等:

profile.php?userid=19

mysite.com/robert-ashcroft/user/19

据我所知,最好尽量留下SEO友好的文字,即

mysite.com/user/19/robert-ashcroft

(stackoverflow做什么)

我无法弄清楚如何在apache的mod_rewrite中执行此操作。有什么帮助吗?

5 个答案:

答案 0 :(得分:4)

实际上,你可能不得不用mod_rewrite来思考“颠倒”。

最简单的方法是让 PHP发出重写的 mysite.com/roberts-clothing-store/store/12/3 链接

mod_rewrite 然后将请求代理到一个PHP页面rewrite.php?path=roberts-clothing-store/store/12/3解码网址并设置参数(此处为storeidpage)  动态包含正确的 PHP文件只为重命名页面发出 301

使用mod_rewrite的纯解决方案是可行的,但这个更容易才能做到正确,尤其是当您不掌握mod_rewrite时。

主要问题可能带有开销,这可能很重要但是简单的价格和灵活性。 mod_rewrite要快得多

更新:

其他帖子回答了问题,但是它们并没有解决通过规范网址避免的典型重复内容问题(并且对于所有看似正常的网址使用301/404,但不是)。

答案 1 :(得分:2)

请尝试以下规则:

RewriteRule ^[^/]+/store/([0-9]+)/([0-9]+)$ store.php?storeid=$1&page=$2 
RewriteRule ^[^/]+/user/([0-9]+)/ profile.php?userid=$1

但我不会使用这样的网址。当您将URL路径视为层次结构并且路径段作为其级别时,它们没有意义。

答案 2 :(得分:2)

然后你可以在.htacces中使用RewriteRule指令,如:

RewriteRule roberts-clothing-store/store/(\d+)/(\d+)$ store.php?storeid=$1&page=$2 [L]

请参阅http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html获取帮助,或google。

答案 3 :(得分:2)

RewriteRule ^roberts-clothing-store/store/([^.]+)/([^.]+)$ store.php?id=$1&page=$2
RewriteRule ^robert-ashcroft/user/([^.]+)$ profile.php?userid=$1

答案 4 :(得分:1)

我的方法是尽可能简化.htaccess并在PHP中完成所有艰苦工作:

RewriteRule ^(.*?)$ index.php?$1

这基本上意味着将所有内容重新路由到我的index.php文件(在css / javascript / image目录中,我只是使用“RewriteEngine off”来对这些文件进行大访问)。在PHP中我不只是拆分(“/”,$ param,5)字符串并运行foreach()来检查所有参数。封装在一个很好的功能,这对我来说很好。

<强>更新

对于这种简单的情况,我强烈建议使用explode()而不是使用split(),因为使用正则表达式,explode()不会带来开销。