无法在PHP GET中传递URL

时间:2011-08-01 01:36:21

标签: php apache .htaccess get

转到http://foo.com/bar.php?url=http://foobar.com/时出现403 Forbidden错误。 如果我对URL进行编码,则会发生同样的情况:http://foo.com/bar.php?url=http%3A%2F%2Ffoobar.com%2F

但如果我对它进行两次编码,它将起作用:http://foo.com/bar.phpurl=http%253A%252F%252Ffoobar.com%252F

我知道我可以做到这一点,但这真的很烦人。

我尝试将以下行添加到.htaccess:SecFilterEngine Off

如果bar.php,存在或为空,它仍然显示403 Forbbidden。

但是,我接到错误:Invalid command 'SecFilterEngine', perhaps misspelled or defined by a module not included in the server configuration

2 个答案:

答案 0 :(得分:0)

这是PHP中的solution

您可以将其编码两次并将其解码两次

<?php 
echo rawurldecode(rawurldecode("http://foo.com/bar.php?url=http%253A%252F%252Ffoobar.com%252F"));

答案 1 :(得分:0)

如果您收到错误: “无效命令'SecFilterEngine',可能拼写错误或由未包含的模块定义”

这是因为你没有在httpd.conf中包含“:LoadModule security_module modules / mod_security.so”。

另一个可能的原因是您正在使用mod_security2并且SecFilterEngine已过时,您应该将其迁移到SecRuleEngine,如迁移文档中所述。

http://www.modsecurity.org/documentation/ModSecurity-Migration-Matrix.pdf