我目前的代码是这样的
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中执行此操作。有什么帮助吗?
答案 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
将解码网址并设置参数(此处为storeid
和page
)
动态包含正确的 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()不会带来开销。