【问题标题】:url rewriting an id with a string variableurl 用字符串变量重写 id
【发布时间】:2009-06-14 13:41:34
【问题描述】:

试图弄清楚如何重写这个 url 客户端

blog.com/post/how-to-get-the-ladies

将服务器端指向

blog.com/post.php?id=123

我知道该怎么做:

blog.com/post/123

RewriteRule ^([^/]+)/?$ post.php?id=$1 [NC,L]

但是如何用帖子标题 slug 替换 id 字符串?

【问题讨论】:

  • 它如何知道将 'how-to-get-the-ladies' 映射到 123?
  • 好吧,这就是我的问题。我知道像 wordpress 这样的博客给你这个选项。想知道他们是使用 mod-rewrite 还是简单地构建 url 以包含标题 slug...
  • 如答案中所述,不,他们不为此使用 mod_rewrite。
  • 好的,我意识到这是重写 + php 的组合(对我来说)。找到这篇文章...认为这是我想做的,但无法弥合差距并弄清楚我需要做什么...contentwithstyle.co.uk/content/…

标签: .htaccess mod-rewrite url-rewriting


【解决方案1】:

网络服务器本身并没有做出这种区分,也无法将您的“唯一文本标识符”转换为数据库 ID。因此,仅由网络服务器评估的 .htaccess 规则对您没有帮助。但它是如何在所有这些 Web 应用程序上完成的呢?通常这种翻译是由 Joomla/Wordpress 自己完成的,并且只有在“how_to_get_the_ladies”文本在整个系统/数据库中是已知且唯一的情况下才有效。

【讨论】:

  • Joomla/Wordpress 只是示例,当然 - 关键是它是在 Web 应用程序中完成的(在 PHP/Python/Perl 等中),而不是在 .htaccess 中。
【解决方案2】:

您可以添加进入索引文件的规则,例如:

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

并在此文件中根据标题显示请求的帖子

【讨论】:

    【解决方案3】:

    我最近解决了一个类似的问题。我建议查看 RewriteMap 指令并使用“外部重写程序”。

    RewriteRule 在可维护性和健壮性方面存在一些很大的限制。如果你还没有到达那里,你可能最终会。只有简单的重写规则才能安全地编写。

    使用 rewriteMap,您可以创建 php 或 perl 脚本,利用您现有的代码库,并从代码中的本地化位置执行所有重写规则,该位置很容易位于版本控制中。

    我相信您需要访问 httpd.conf(或 vhost)配置文件,但不能将 RewriteMaps(或一些相关指令)放入 .htaccess 文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 2014-08-07
      相关资源
      最近更新 更多