使用mod_rewrite将带有哈希字符的路径转换为查询字符串

35
我有一个PHP项目,需要在URL的路径中发送一个带有井号(#)的字符。(http://www.example.com/parameter#23/parameter#67/index.php)我以为urlencode可以允许这样做,将#转换为%23。

但现在我意识到,即使是经过url编码的#也会强制浏览器将右侧所有内容视为URL片段(或查询)。
有没有一种通过方式来传递一个#,或者我需要在urlencode之前进行字符替换? 编辑添加(2017年9月19日): 事实证明,我问错了问题。我的问题不在于在路径中使用井号(对其进行编码确实有效),而在于使用mod_rewrite将其转换为查询字符串。我没有在RewriteRule中重新进行编码。我将编辑标题以匹配。

这是我正在使用的重写规则:
RewriteEngine On
# convert path strings into query strings
RewriteRule "^(.*)/(.*)/hashtags.php"      /hashtags.php?parameter_1=$1&parameter_2=$2 [QSA,L]

一旦我添加了 B 标签,它就正常工作了:

RewriteEngine On
# convert path strings into query strings
RewriteRule "^(.*)/(.*)/hashtags.php"      /hashtags.php?parameter_1=$1&parameter_2=$2 [QSA,L,B]

你以什么方式使用那个URL? - Gumbo
我相信 urlencode 应该将其更改为 %23,请提供一个示例代码,好吗? - David Houde
我正在创建指向动态创建的PDF的静态链接。我正在使用modrewrite将路径元素传递到$_GET中。这些是创建PDF所需的产品参数。其中一些产品名称中有哈希标签。 - Mark
5
哈希符号是一个保留字符,无论如何Web浏览器都会将其视为这样处理。即使你对它进行编码,解释方式也是相同的。那么还有其他字符可以使用吗? - Jeremy Morgan
杰里米:是的,在进行了更多测试之后,我意识到是浏览器在作怪。如果我绕过浏览器,直接告诉 PHP 解释两个 URL(一个使用 urlencode,另一个不使用),它可以完美地解析编码的 URL。在创建 URL 之前,我得进行一次替换。谢谢! - Mark
1个回答

85

2
这个有效,令人惊讶的是正确答案花了这么长时间才被回答。 - Benjineer
我将此答案标记为正确。我想知道自从我第一次提问以来,浏览器是否有所改变。我肯定尝试过%23。 - Mark
六年后,我重新审视了这个问题,并意识到Spider是正确的,而我实际上一直在问错问题。我编辑了标题和问题以反映这一点。迟做总比不做好,对吧? - Mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接