【问题标题】:Apache url-rewriting fails when URL contains "index"当 URL 包含“索引”时,Apache url 重写失败
【发布时间】:2013-07-26 14:58:14
【问题描述】:

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

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

但是 2 个 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 配置,没有发现任何问题。 DirectoryIndex 是 Ubuntu 的默认索引(index.phpindex.html、...但不仅仅是index)。

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

【问题讨论】:

  • 我没有看到任何问题,我测试了相同的代码,索引没有任何问题
  • 您的应用程序可能会返回 404,因为任何不存在的文件都会被重写到您的 index.php 中,除非您没有包含其他重写规则
  • @Anigel 所以我不应该有 404。无论如何,所有其他页面都可以正常工作,Akam 也对其进行了测试。
  • 重写规则将其发送到您的应用程序。您的应用程序中的某些内容返回 404 而不是重写规则
  • @Anigel 好的,我明白你的意思,但我 100% 确定应用程序方面没有问题。我切换PC并重新安装了系统,现在问题出现了。我使用与所有其他同事完全相同的代码,并且该应用程序在生产中运行良好。我怀疑 Apache 配置(不是重写规则或应用程序本身)。

标签: php apache zend-framework url-rewriting


【解决方案1】:

选项 -MultiViews 将阻止 /inventory/index 通过 mod_negotiation 映射到磁盘上的 index.php。

由于您在每个目录 mod_rewrite 中使用 %{REQUEST_FILENAME},因此您隐含地看到了任何模块(如 mod_negotiation/mod_dir)的结果,这些模块可能已将 URL 映射到文件名,例如。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我明天上班试试。但问题是我已经使用了多年的设置,这对我的同事(或生产中)没有任何问题。但我已经切换到全新安装的 Ubuntu,我猜 Apache 将“index”视为与“index.php”相同,因此他没有应用重写规则。但我不知道为什么! :S
    • @MatthieuNapoli 也许您现在拥有不同版本的 Apache 或不同的配置文件(这真的很现实!)。我会寻找旧服务器的备份。
    • 它不是服务器,它是我的开发机器。旧的安装不见了。反正它是一台windows机器,所以没关系。
    猜你喜欢
    • 1970-01-01
    • 2011-12-21
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多