0

我正在使用 mod_rewrite,并使用已在内容管理系统中输入的关于我们的页面标题,而不是 index.php?page=1

所以我有一个规则

RewriteRule     ^pages/([A-Za-z0-9\-]+).php?$   index.php?page=$1                   [NC,L]  # Handle site navigation

看起来不错的网址 www.domain.com/pages/About-Us.php 并将请求发送到 www.domain.com/index.php?page=About-Us

但是 url 编码为空格添加了一个加号,所以如果我查询 About-Us 它显然不起作用,因为我应该查询的是 domain.com/About+Us.php

我想使用 About-Us.php 版本,如何获得 url 编码以使用 - 而不是 + 来处理我的空间?

富有的 :)

4

1 回答 1

4

urlencode()仅用于查询参数(后面的所有内容?)。+是 URL 查询部分中的特殊字符,表示文字空间;文字+字符需要进行百分比编码。rawurlencode()适用于所有其他 URL 部分,并且它不会将空格编码为+.

另一方面,破折号不是特殊字符,而是直接在 URL 中表示自己。

您尚未指定您正在使用哪个 CMS,或者它是否是您自己的内部解决方案,但您想要做的是在 URL 中使用slugs而不是实际的页面标题。

大多数 CMS 在创建每个页面时会自动为每个页面创建一个 slug,方法是将标题转换为小写字母并用破折号替换空格和标点符号。理想情况下,这个 slug 应该是数据库中的一个实际字段,以便在需要时可以手动覆盖它。当您生成指向页面的链接时,您将它们的 slug 包含在 URL 中,并且当您收到对页面的请求时,您在数据库中按 slug 查找它,而不是按标题。

于 2012-06-19T10:36:38.637 回答