为什么PHP URL编码让我获得403拒绝访问权限

时间:2017-03-22 09:08:27

标签: php apache

我正在尝试通过php(5.6.25)文件中的href将一些$ _GET信息从一个网页传递到另一个网页。当我省略URLencoding时,Apache / 2.4.23找到了网址就好了。使用URLencoding,我被拒绝访问。 href的两个版本使用相同的服务器位于同一文件中。

没有网址编码但正在工作:

<?php
    $url = "Manage_Cumulative_DEV.php";
    $url .= /*URLencode*/ ('?thread_ID='.$row['thread_ID']);
?>
<a href="<?php echo htmlspecialchars($url); 
?>">
<?php echo htmlspecialchars($display_text);
echo '<br>';
?>
</a>
<?php 

成功的链接如下所示:

http://localhost/WS_map_code/Manage_Cumulative_DEV.php?thread_ID=437769

使用网址编码 - 并且已损坏:

<?php
    $url = "Manage_Cumulative_DEV.php";
    $url .= URLencode('?thread_ID='.$row['thread_ID']);
?>
<a href="<?php echo htmlspecialchars($url); 
?>">
<?php echo htmlspecialchars($display_text);
echo '<br>';
?>
</a>
<?php 

当我运行URLencoded版本时,我收到403错误代码和此消息: 禁  您无权访问此服务器上的 /WS_map_code/Manage_Cumulative_DEV.php?thread_ID=437769 。 位于localhost端口80的Apache / 2.4.23(Win64)PHP / 5.6.25服务器 (注意错误消息如何引用在没有URL编码的情况下成功为我工作的相同href。它似乎知道我想说的是什么。)

失败的,URLencoded href(从地址栏复制)看起来像这样,似乎是正确的: http://localhost/WS_map_code/Manage_Cumulative_DEV.php%3Fthread_ID%3D437769

我知道我很厚,因为我已经戳了戳,刺激并研究了几个小时。我怜悯更薄的人。

1 个答案:

答案 0 :(得分:1)

$url = "Manage_Cumulative_DEV.php?thread_ID=";
$url .= URLencode($row['thread_ID']);

应该做的伎俩。在您的代码中,您是否对URL进行了编码?这会导致无效的请求网址