我正在使用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编码来处理我的空格 - 而不是+?
Rich:)
答案 0 :(得分:4)
urlencode()
仅用于查询参数(?
之后的所有内容)。 +
是URL查询部分中的特殊字符,表示文字空间;文字+
字符需要进行百分比编码。 rawurlencode()
适用于所有其他网址部分,并且不会将空间编码为+
。
另一方面,破折号不是特殊字符,而是直接在URL中表示。
您尚未指定正在使用的CMS,或者它是您自己的内部解决方案,但您要做的是在URL中使用slugs而不是实际的页面标题。
大多数CMS在创建时会自动为每个页面创建一个slug,方法是将title转换为小写,并用短划线替换空格和标点符号。理想情况下,此slug应该是数据库中的实际字段,以便在需要时可以手动覆盖它。当您生成指向页面的链接时,您可以在URL中包含它们的slug,当您收到页面请求时,您可以通过slug而不是标题在数据库中查找它。