即使使用mod_rewrite唯一提供的参数为id,如何自动获取slug

时间:2012-02-22 10:57:03

标签: php mod-rewrite seo slug

即使只提供了id,我也想得到slu ..例如,我输入:

http://stackoverflow.com/questions/6421212/

加载网站后,网址变为:

http://stackoverflow.com/questions/6421212/how-to-rewrite-url-with-post-title-slug

我的意思是,即使我只输入了Id,我想要拉出slu ..

提前致谢!

2 个答案:

答案 0 :(得分:1)

在加载的页面中,几乎立即检查slug。如果它不存在,请将其从数据库中取出(您有ID)并重定向到新的完整链接。

如果你在渲染任何HTML等之前这样做,它看起来就像是在没有重定向的情况下完成的。

如果您发布当前的htaccess,我可以修改您提供的slug所允许的内容,并且不提供slug。

答案 1 :(得分:1)

mod_rewrite不知道给定ID的右侧slug。您生成slug的应用程序确实如此。因此,您使用ID从数据库中获取slug并将其与浏览器发送的数据进行比较。如果它不匹配,则发出301重定向到完整(如果slug为空)或更正(如果slug不匹配)URL。这就是SO的运作方式。打开这些URL并查看网络检查器,看看我的意思:

  • http://stackoverflow.com/questions/9393455/
  • http://stackoverflow.com/questions/9393455/foo-bar-blah-baz

在PHP中,检查$_SERVER超级全局,您应该能够在重写之前找到包含实际URL的变量。您可以像这样发送301标题:

header("Location: /1234/correct-slug", true, 301);