当我将 URL 作为参数传递时 Apache 失败

当我将 URL 作为参数传递时 Apache 失败

大家好,我对这个问题真的很困惑。我会尝试描述它:

问题是: http://mydomain.com/somedir/somephp.php?arg1=value&arg2=http://otherdomain.com&arg3=http://othertoo.com/somepath/something... 完全失败了。使用 url 编码和不使用 url 编码都失败了。

我的网站读取 mydomain.com/everything 之后的所有内容,除了存在的文件和目录。我使用 mod_rewrite 执行此操作:

Options -Indexes 

RewriteEngine on

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

RewriteRule ^(.*)$ handler.php

上面的查询示例位于 handler.php。如果我注释掉 RewriteRule,将会出现 apache 错误:

Forbidden

You don't have permission to access /somedir/somephp.php on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

经过大量测试等,我发现 url 参数中的 http:// 或 :// 字符串存在问题。但它以 url 编码的形式出现 :S

这个东西应该是一个 openId 身份验证系统,但它在回发时失败了,我确信 url 参数中的 url 会导致这个错误。

我以前从未遇到过这个问题,尽管我做了很多同样的事情。url 编码一定有效。

请帮助我!谢谢!

答案1

“彻底失败”是什么意思?你得到了什么错误代码?你的服务器文件中有什么错误?显示了什么?

您的重写规则很好!权限错误并不重要,因为它不是您想要提供的文件,只要 handler.php 可访问即可。

不过我认为你的错误是上面的配置与你尝试的配置不完全相同。如果你有这样的配置:

RewriteRule ^(.*)$ handler.php?a=b

您将失去我们的查询字符串参数,因为它被 a=b 覆盖。然后您可以执行以下操作:

RewriteRule ^(.*)$ handler.php?a=b [QSA]

它告诉 apache 附加您的查询字符串(QSA=QueryStringAppend)

相关内容