我有兴趣从中提取目录$_SERVER['REQUEST_URI']
。我相信我特别需要使用$_SERVER['REQUEST_URI']
以防 URL 被mod_rewrite
“d”。
如果$_SERVER['REQUEST_URI'] = 'http://example.com/path/to/resource';
,那么我可以使用dirname()
它并获得http://example.com/path/to
.
如果 URI 是目录索引页/等效项,但附加了查询字符串或哈希,则$_SERVER['REQUEST_URI']
可能类似于'http://example.com/path/?query'
or http://example.com/path/#hash
。在这种情况下,dirname()
也可以正常工作——两者都解决了http://example.com/path
.
但是,如果 URI 没有查询字符串或散列,pathname()
则剥离底层目录,例如http://example.com/path/
变为http://example.com
. 我的解决方案是简单地将哈希符号附加到每个 URI,即dirname($_SERVER['REQUEST_URI'].'#')
. dirname('http://example.com/path/'.'#')
产量http://example.com/path
。
但我不明白 URI 是如何工作的,所以我真的不知道这是否安全。
- 如果 URI 指向一个目录,它是否总是以字符结尾
/
?如果我http://example.com/path
在浏览器中输入,它会重定向到http://example.com/path/
,并添加尾部斜杠。但是,这会一直发生吗? - 查询字符串和哈希是否总是得到 URL 编码?例如,我可以
http://example.com/path/?query=a/b/c
在我的浏览器中输入,它会被解释为http://example.com/path/?query=a%2Bb%2Bc
. 但是如果没有发生这种转换,那么pathname()
就会返回http://example.com/path/?query=a/b
,这会很糟糕。 - URI 可以有
\
s 还是目录总是用 分隔/
?