在用ThinkPHP框架做开发时,用apache的rewrite来隐藏url里入口文件index.php,在windows下一切正常,但是到了ubuntu下,其他的都正常,只有请求地址后边是index时会出现404 not found错误,看了apache的错误日志,提示是这样的,
Negotiation: discovered file(s) matching request:
 /var/www/tptest/index (None could be negotiated).,貌似是说找到多个可能的路径,无法决定是哪个?.htaccess文件内容如下<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>从结果来看,重写规则是没有执行的,因为如果执行,会被路由到Xx模块下的index方法,而不是出现404 not found。
求大神解答!弄了一下午了还没搞懂,虽然可以避免用index,但总觉得这里有点迷糊。
Apacheurl-rewriteindex

解决方案 »

  1.   

    看看大小写有没有错误,linux下严格区分大小西,windows下不严格区分大小写。
      

  2.   

    这个我知道,已经确认,大小写完全没问题。比如我访问localhost/tpapp/login能被正确重写为localhost/tpapp/index.php/login,唯独访问localhost/tpapp/index会出现404错误,测试过localhost/tpapp/inde和localhost/tpapp/indexx,都能被正确重写
      

  3.   

    你有一个名为 index 的目录吧?
      

  4.   


    没有,只有模板目录下一个Index文件夹
      

  5.   

    那你运行的时候,运行的路径是怎么样的?还有好像是这样的http://localhost 举例本机的地址
      

  6.   

    你说的是访问的url吧,是http://localhost/tpapp/index
      

  7.   

    你说的是在apache的配置文件里设置网站根目录么?这个有设置
      

  8.   

    我之前出现过一个错误是不能叫index.php
    好像会和一个系统自带的隐藏进行冲突,建议换个名字试试
    我当时没细查原因,马上要交了,换个名字好用就继续做别的去了。。惭愧。。
      

  9.   

    我目前采取的方案也是把index改成其他的,但总觉得这里有点诡异..
      

  10.   


    如果改完以后能用不就行了么,一定要叫index么?
      

  11.   

    我强迫症,有问题不搞清楚心里不舒服好吧,我去查了一下,好像很多这种错误信息的引起是因为虚拟机配置文件中的multi views 这个选项没有关,你可以从这个角度入手去查查具体的原因
      

  12.   

    确实如u010288546所说,跟multiviews这个选项有关,参见:
    http://httpd.apache.org/docs/2.0/content-negotiation.html#multiviews
    当在某个目录(比如在站点根目录"/")下启用multiviews选项时,如果某个url(如/foo)未能命中文件或目录,在它进行rewrite匹配之前,会尝试"Negotiation"(即协商)的动作,对于"/foo",这样的链接,会在根目录"/"下查找"foo.*"这样的文件来匹配,具体匹配到哪个文件,又是由"type-map"(如accept等指令的配置内容)的内容来指定。如果在目录下找到"foo.*"的文件但即没有找到合适的"type-map"规则来处理时,就会得到"Negotiation"错误而退出处理(即不再处理rewrite规则)。我观察到你的tpapp目录下有"index.php"文件,在/tpapp/index在"Negotiation"时,会因为找到了"/tpapp/index.php"文件而没有对应"type-map"规则而导致出错。要避免这个问题,简单的就是禁用multiviews选项:
    Option -Multiviews
    我强迫症,有问题不搞清楚心里不舒服好吧,我去查了一下,好像很多这种错误信息的引起是因为虚拟机配置文件中的multi views 这个选项没有关,你可以从这个角度入手去查查具体的原因