代码之家  ›  专栏  ›  技术社区  ›  xRobot

如何像这样重写URL?

  •  0
  • xRobot  · 技术社区  · 14 年前

    我将如何重写(我博客中的每一篇文章):

    http://localhost/post.php?id=13
    
    to
    
    http://localhost/this-is-the-title-of-the-post/13
    

    http://localhost/post.php?id=13
    
    to
    
    http://localhost/this-is-the-title-of-the-post/
    
    3 回复  |  直到 14 年前
        1
  •  2
  •   Gumbo    14 年前

    尝试此规则:

    RewriteEngine on
    RewriteRule ^[^/]+/(\d+)$ post.php?id=$1
    

    这将重写请求的URI路径,如 /this-is-the-title-of-the-post/13 内部到 /post.php?id=13

    RewriteRule ^this-is-the-title-of-the-post/(13)?$ post.php?id=13
    

    这意味着它必须是独一无二的。否则,标题不能明确地映射到数字ID。在这种情况下,如果你把头衔传给 邮政.php

    RewriteCond %{REQUEST_FILENAEM} !-f
    RewriteRule ^([^/]+)/$ post.php?title=$1
    

    显然,由于标题是唯一的,您不再需要数字标识了。

        2
  •  1
  •   Spudley Pat    14 年前

    您的第一个示例非常简单,因为重写的URL只需要在正确的位置包含ID就可以工作。前面的答案已经给出了一个可行的解决办法。

    第二个示例(即在重写的URL中没有ID)需要修改基础PHP来查询DB以查找页面标题而不是ID(这可能会影响站点的性能,具体取决于您的编写方式)。或者,您可以为每个单独的URL设置一个特定的重写规则,但这需要维护相当大的开销。

    希望有帮助。

        3
  •  1
  •   krikulis    14 年前

    如果您只想拥有纯文本的URL(URL中没有pk引用),则必须在数据库中实现唯一的SLUG字段(对于date,它可以是唯一的,就像wordpress一样)。
    我建议重定向所有与现有文件不匹配的请求索引.php并处理$\u SERVER['REQUEST\u URI']并避免处理mod\u rewrite magick(从长远来看会导致无法维护和magick代码)。 mod_rewrite rule for this