需要在带有漂亮 url 的查询字符串中传递反斜杠

Need to pass backslashes in query string with pretty urls

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

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

//.Htaccess
RewriteEngine On

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

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

然后接收 $_GET['arguments'],值由 /

分隔

例如: blog/post/2/ 将用 'post/2/'[= 填充 $_GET['arguments'] 14=]

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

我不知道如何修复它。提前致谢。

希望我没看错,试试这个:

'/file.php?id=$value'//this utilise that backslash and then pass the id to the `$_Get[]` Function somewhere in the file.php.

您收到 404 错误的原因是因为默认情况下,Apache AllowEncodedSlashes turned off, and its behavior is to 404 any request containing a backslash. This is because having it turned on is a potential security hazard。在 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 标志,它会将未编码的反斜杠转换为编码的反斜杠。