当URL包含“index”时,Apache URL重写失败

时间:2013-07-26 11:00:50

标签: php apache zend-framework url-rewriting

我网站的所有页面都使用网址重写,例如:

http://localhost/inventory/orga/organization/manage

但是2个网址不起作用,并且网址中都包含“index”,所以我怀疑这是原因:

http://localhost/inventory/index
http://localhost/inventory/index/home

这些网址导致找不到404

该网站是一个PHP应用程序。这是.htaccess文件:

RewriteEngine on
RewriteBase /inventory/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php  

我检查过Apache配置我找不到任何错误。 DirectoryIndex是Ubuntu的默认值(index.phpindex.html,...但不仅仅是index)。

知道为什么以及如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

选项-MultiViews将停止/库存/索引通过mod_negotiation映射到磁盘上的index.php。

由于你在每个目录的mod_rewrite中使用%{REQUEST_FILENAME},你隐含地看到任何模块的结果,比如mod_negotiation / mod_dir可能已经将URL映射到文件中,例如,

答案 1 :(得分:0)

这可能是因为您的应用程序的基本文件IS INDEED是index.php,对吧?您的.htaccess文件说当有一个具有该名称的真实文件时,请使用该文件(这对图像文件,js等有意义)。

我正在运行与你非常相似的东西,我没有那个问题。看看我的.htaccess:

RewriteEngine On

#When using the script within a subfolder, put this path here, like /mysubfolder/
RewriteBase /myprojectsfolder/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

当您删除最后一条.htaccess行时会发生什么?