2010-02-02 49 views
1

我不知道这是一个Apache或PHP的事情,但如果你去到任何一个:如何停止解析为文件时不存在的URL?

mysite.com/about 
mysite.com/about/ 

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

我相信这是一些设置,也许是一个htaccess的东西,任何想法?

回答

3

正如其他人已经回答,它可能是一个mod_rewrite规则;还有一个叫做MultiViews的指令明确地用于启用你描述的功能。

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

多视图的作用是作为 如下:如果服务器接收用于/一些/目录/ foo的一个 请求时,如果 /一些/目录,使多视图,和 /一些/ DIR /富不存在,那么 服务器读取寻找名为foo 文件的目录。*,有效 假货一个类型的地图,名称的所有 这些文件,赋予它们同样 媒体类型和内容编码它如果客户要求其中一个名称为 ,则会有个客户。然后它选择 与客户的 要求的最佳匹配。

查找

Options MultiViews 
在httpd.conf或特定的虚拟主机,配置文件

+0

非常感谢这正是我一直在寻找! – fire 2010-02-02 14:26:23

+0

很高兴帮助。 MultiViews对于一些人来说非常棒(防止大量使用.htaccess文件和mod_rewrite规则)以及其他人的祸害。 – meagar 2010-02-02 14:28:51

3

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

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

+1

+1这绝对不是一个默认的PHP/Apache的安装。我怀疑一个'mod_rewrite'指令或一个模块,可以建议替代文件名称为不完整的请求,我忘了它的名字... – 2010-02-02 14:06:47

0

这个的.htaccess可以解析,用$ _ SERVER [REQUEST_URI]在PHP端,完整的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> 

和int PHP的一面,这应该是本的index.php

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

与问题无关 – meagar 2010-02-02 14:26:51