如何阻止不存在的URL解析为文件?

时间:2010-02-02 14:01:05

标签: php apache

我不知道这是Apache还是PHP的东西,但如果你去了以下任何一个:

mysite.com/about
mysite.com/about/

它将显示mysite.com/about.php文件而不是404错误,因为该目录不存在。

我确信这是一些设置,也许是一个htaccess的事情,任何想法?

3 个答案:

答案 0 :(得分:3)

这肯定不是默认行为,所以很难说。如果在Apache端发生这种情况,请查找一系列重写匹配指令;它们可能以RewriteCond开头,以RewriteRule结尾。

如果您在VirtualHost配置或网站.htaccess中没有看到类似的内容,那么它将由您正在使用的任何PHP框架进行管理,而您需要在那里配置内容

答案 1 :(得分:3)

正如其他人所回答的那样,它可能是一个mod_rewrite规则;还有一个名为MultiViews的指令,它明确用于启用您描述的功能。

http://httpd.apache.org/docs/2.2/content-negotiation.html#multiviews

  

MultiViews的效果如下   如下:如果服务器收到一个   请求/ some / dir / foo,if   / some / dir启用了MultiViews,并且   / some / dir / foo不存在,那么   服务器读取要查找的目录   文件名为foo。*,并且有效   伪造一个名为all的类型地图   这些文件,分配相同   媒体类型和内容编码   如果客户要求的话会有   其中一个名字。然后它选择   与客户的最佳匹配   要求。

寻找

Options MultiViews

在httpd.conf或特定于虚拟主机的配置文件中。

答案 2 :(得分:0)

使用此.htaccess,您可以使用PHP端的$ _​​SERVER [REQUEST_URI]解析完整的URL然后执行所需的操作,这是一种通用的方法,您应该考虑错误控制和404重定向:

ErrorDocument 404 /404.php
<IfModule mod_rewrite.c>
RewriteEngine On
# RewriteBase 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
</IfModule>

并在PHP方面,这应该是这个index.php

$URLarray = explode('/', $_SERVER['REQUEST_URI']);