php - 如何防止 apache 在 URL 路径中用单斜杠减少双斜杠?

标签 php apache url path

Apache 有一种非常烦人的倾向,即用单斜杠替换 URL 中的双斜杠。

例子:

请求网址:http://example.com/myscript.php/foo//bar

当我看着

$_SERVER['PATH_INFO']; 

var,路径信息将显示为:

foo/bar

代替

foo//bar

有人知道解决这个问题的方法吗?我相信这是 apache 功能中根深蒂固的某处......我不知道是否有某种 apache 标志可以调整以禁用此行为。

最佳答案

http://example.com/myscript.php/foo//bar

/foo//bar 是跟在实际文件名之后的附加路径信息。虽然 Apache 确实减少了 PATH_INFO 服务器变量(传递给相应的 PHP superglobal)中的多个斜杠,但原始 URL(带有多个斜杠)在 $_SERVER['PHP_SELF'] 变量中仍然可用。

因此,除了通过 PATH_INFO 变量访问路径信息之外,您还可以执行如下操作:

$pathInfo = str_replace($_SERVER['SCRIPT_NAME'],'',$_SERVER['PHP_SELF']);

这只是从 PHP_SELF 中删除了 SCRIPT_NAME,留下了路径信息(如果有的话)。您可以使用 REQUEST_URI 而不是 PHP_SELF,但这包括查询字符串,因此您需要对此进行检查。

因此,鉴于上述请求,其中 SCRIPT_NAME 是“/myscript.php”,PHP_SELF 是“/myscript.php/foo//bar”,那么结果 $pathInfo 是“/foo//bar”。

关于php - 如何防止 apache 在 URL 路径中用单斜杠减少双斜杠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12413030/

相关文章:

php - Docker apache2 不会考虑新的 000-default.conf

php - 如何在 Ubuntu 14.04 上卸载 LAMP?

javascript - 在 javascript 中传递表单提交的额外参数

php - PHP mysql 上的 IF 查询

php - MS SQL CONCAT 与 "+"查询差异(使用 Doctrine 2)

php - foreach 与一个项目数组

php - 如何将 PHP 服务器 API 从 CGI/FastCGI 更改为 Apache 2.0 处理程序?

PHP "Warning: usort() [function.usort]: Invalid comparison function"排序

iOS canOpenURL 返回 true,但未安装应用程序(facebook)

regex - htaccess 正则表达式目录到变量