Php 当url包含“时,Apache url重写失败”;索引“;

Php 当url包含“时,Apache url重写失败”;索引“;,php,apache,zend-framework,url-rewriting,Php,Apache,Zend Framework,Url Rewriting,我网站的所有页面都使用url重写,例如: http://localhost/inventory/orga/organization/manage 但有两个URL不起作用,并且都包含URL中的“索引”,因此我怀疑这是原因: http://localhost/inventory/index http://localhost/inventory/index/home 这些URL导致未找到404 该网站是一个PHP应用程序。以下是.htaccess文件: RewriteEngine on Rewri

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

http://localhost/inventory/orga/organization/manage
但有两个URL不起作用,并且都包含URL中的“索引”,因此我怀疑这是原因:

http://localhost/inventory/index
http://localhost/inventory/index/home
这些URL导致未找到
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配置,没有发现任何错误。目录索引是Ubuntu的默认索引(
index.php
index.html
,…但不仅仅是
index


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

这可能是因为你的应用程序的基本文件确实是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行时会发生什么情况?

选项-多视图将通过mod_协商停止/inventory/index映射到磁盘上的index.php


由于您在每个目录mod_rewrite中使用%{REQUEST_FILENAME},因此隐式地看到了mod_negotiation/mod_dir等模块的结果,这些模块可能已将URL映射到文件a,e.

我在这里看不到任何问题,我测试了相同的代码,但没有任何索引问题。我们的应用程序可能会返回404,因为任何不存在的文件都会被重写到index.php,除非您还没有其他重写规则included@Anigel所以我不应该用404。不管怎样,所有其他页面都正常工作,并且Akam也对其进行了测试。重写规则将其发送到您的应用程序。应用程序中的某些内容返回404而不是重写rule@Anigel好的,我明白你的意思,但我100%确定应用程序方面没有问题。我换了电脑,重新安装了系统,现在问题出现了。我使用的代码与我所有其他同事完全相同,并且该应用程序在生产环境中运行良好。我怀疑Apache配置(不是重写规则或应用程序本身),明天我会在工作中尝试。但问题是,这是我多年来一直使用的设置,不会给我的同事(或在生产中)带来任何问题。但是我换了新安装的Ubuntu,我猜Apache将“index”视为与“index.php”相同,所以他没有应用重写规则。但我不知道为什么!:S@MatthieuNapoli也许您现在有了不同版本的Apache或不同的配置文件(这非常现实!)。我会寻找旧服务器的备份。它不是服务器,而是我的开发机器。旧的安装也不见了。不管怎么说,这是一台windows机器,所以没关系。