问题:假设网址正在请求不存在的文件,例如mydomain.com/index.php/bogus
没有名为' bogus'的文件夹。所以我希望找不到' 404'响应,但Apache将请求发送到/index.php(确实存在)。为什么?如何更改以回复未找到404'?
我认为,理论上,Apache这样做是为了让我为文件夹生成一个自定义的索引页面' bogus' (但不存在)。但实际上,通过返回200响应的页面,它会引起搜索引擎和意外访问者的混淆。我的PHP代码在' index.php'不期望这个URL,因此它在动态导航例程中生成断开的链接。
我尝试禁用索引(Option -Indexes
)和目录索引(DirectoryIndex disabled
)并删除.htaccess(AllowOverride None
)。这些都没有改变回应。我已经搜索了stackoverflow,它有很多"如何提供文件而不是404"但事实恰恰相反:我希望Apache返回404,而不是从文件系统中的较高位置提供PHP文件。
我的服务器环境是Windows Server 2008,Apache 2.2.22和PHP 5.3。没有mod_rewrite。
答案 0 :(得分:1)
可行的解决方案是将AcceptPathInfo Off
添加到Apache配置文件中。
此指令控制是否接受或拒绝包含跟随实际文件名(或现有目录中不存在的文件)的尾随路径名信息的请求。可以通过CGI(通用网关接口)规范使脚本可以使用尾随路径名信息。
Apache核心文档有更多信息:http://httpd.apache.org/docs/2.0/mod/core.html#acceptpathinfo
答案 1 :(得分:0)
您没有名为index.php的文件夹,您有一个具有该名称的文件。我认为apache会找到该文件并确定它已找到所请求的内容,因此它会提供该文件。
在index.php文件中,您可以检查$_SERVER['REQUEST_URI']
是否为index.php的有效请求。如果它不是有效请求,您可以使用PHP http_response_code(404)
或header()
函数使index.php为无效URL返回404。