在用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
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
没有,只有模板目录下一个Index文件夹
好像会和一个系统自带的隐藏进行冲突,建议换个名字试试
我当时没细查原因,马上要交了,换个名字好用就继续做别的去了。。惭愧。。
如果改完以后能用不就行了么,一定要叫index么?
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 这个选项没有关,你可以从这个角度入手去查查具体的原因