除了缺少目录索引文件外,mod rewrite 工作正常

除了缺少目录索引文件外,mod rewrite 工作正常

我有一个托管在 Apache 上的旧网站。它有许多网页位于公共 Web 根目录及其子文件夹中。

举个例子,假设这些是仅有的我的 Web 根目录中的文件和文件夹:

publicDocs/
directorywith_no_defaultfile/
    some-legacy-flat-page.htm
.htaccess
index.php
some-legacy-flat-page.htm

我想开始使用 Zend MVC一些较新的页面。

我有一个 .htaccess mod 重写规则,以便任何对不存在的文件的请求都会被发送到 MVC 引导文件 (/index.php) 来处理。

使用我当前的设置,以下类型的请求已成功路由到 MVC 引导程序“/index.php”:

  • /index.php
  • /废话
  • /目录没有默认文件/bloo

旧版(平面)页面可以成功处理以下类型的请求

  • /一些传统平面页面.htm
  • /directorywith_no_defaultfile/some-legacy-flat-page.htm

但是,当我请求一个不存在的文件时,该目录如下:

  • /没有默认文件的目录

或者

  • /没有默认文件的目录/

我没有将这些路由到 MVC 引导程序,而是收到一个错误:

Forbidden    
You don't have permission to access /directorywith_no_defaultfile/ on this server.    
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

我怀疑这可能与 Apache 处理默认文件的方式有关。

目前解决这个问题的唯一方法是:

  • 删除该目录(当该目录包含平面遗留页面时这是不可能的),或者
  • 在其中放置一个 index.htm 文件,其中包含包含()引导文件的脚本

您知道哪些 Apache 指令可能导致此“禁止”错误吗?

我可以在 .htaccess 中使用任何指令来告诉 Apache 不要介意目录中缺少默认文件,而只需让 mod-rewrite 来担心?

答案1

DirectoryIndex 指令的文档包括以下内容:

Note that the documents do not need to be relative to the directory;

DirectoryIndex index.html index.txt /cgi-bin/index.pl

would cause the CGI script /cgi-bin/index.pl to be executed if neither
index.html or index.txt existed in a directory.

因此,在适当的位置添加以下行就可以了:

DirectoryIndex index.html index.php /index.php

调整它以支持您希望正常处理的任何类型的索引文件。只要“/index.php”是最后一个,它就会执行您想要的操作。

答案2

这是我通常在 .htaccess 文件中设置 mod_rewrite 脚本的方式

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    rewriterule ^(.*)$ http://www.domain-name.com/$1 [r=301,nc]
</IfModule>

希望有帮助!

相关内容