需要在带有漂亮 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 标志,它会将未编码的反斜杠转换为编码的反斜杠。
我正在尝试将反斜杠作为查询字符串参数的一部分进行传递。
该项目使用了一个非常简单的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 标志,它会将未编码的反斜杠转换为编码的反斜杠。