0

我正在尝试将反斜杠作为查询字符串参数的一部分传递。

该项目使用了一个非常简单的url_rewriting方法:

//.Htaccess
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .* index.php?arguments=$0 [NC,L]

然后接收$_GET['arguments']/分隔的值

例如: blog/post/2/ 将填写$_GET['arguments']'post/2/'

问题是,当我尝试传递类似test%5Cabc(为test\abc编码的 URL )之类的内容时,请求会返回 404 错误,而不是将其作为参数传递

我不知道如何解决它。提前致谢。

4

2 回答 2

1

您收到 404 错误的原因是因为默认情况下,Apache 已关闭AllowEncodedSlashes ,它的行为是对任何包含反斜杠的请求进行 404。这是因为打开它是一个潜在的安全隐患。在 Apache 2.2.18 及更高版本中,有一个 NoDecode 设置使它更安全一些,并且适用于您的情况。

无论如何,我尝试在本地打开它,实际上是这个脚本:

<?php var_dump($_REQUEST); ?>

能够处理像这样的网址

http://localhost/this\is\a\test

和输出

array(1) { ["arguments"]=> string(14) "this\is\a\test" } 

但是,它(或我的浏览器)似乎存在编码反斜杠的问题,将它们转换为常规反斜杠 - 也许这不是问题。如果您在重写器上启用 B 标志,它会将未编码的反斜杠转换为编码的反斜杠。

于 2015-02-11T01:06:09.803 回答
0

我希望我没听错,尝试使用这个:

'/file.php?id=$value'//this utilise that backslash and then pass the id to the `$_Get[]` Function somewhere in the file.php.
于 2015-02-11T00:24:41.947 回答