大家好,我对这个问题真的很困惑。我会尝试描述它:
问题是: 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)