Назад | Перейти на главную страницу

перезапись мода отлично работает, кроме отсутствующих файлов индекса каталогов

У меня есть устаревший веб-сайт, размещенный на Apache. У него есть несколько веб-страниц, находящихся в общедоступном веб-корне и его подпапках.

Например, скажем, это только файлы и папки в моем корневом веб-каталоге:

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

Я хотел бы начать использовать Zend MVC для некоторые из новых страниц.

У меня есть правило перезаписи мода .htaccess, так что любой запрос несуществующего файла отправляется для обработки с помощью файла начальной загрузки MVC (/index.php).

С моей текущей настройкой следующие типы запросов успешно маршрутизируются в /index.php, загрузочную программу MVC:

Следующие типы запросов успешно обслуживаются старыми устаревшими (плоскими) страницами

Но когда я запрашиваю несуществующий файл, это такой каталог:

или

вместо того, чтобы направлять их в загрузочную систему 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 обрабатывает файлы по умолчанию.

В настоящее время единственный способ решить эту проблему - это:

Знаете ли вы, какие директивы Apache могут вызывать эту «Запрещенную» ошибку?

Могу ли я использовать какие-либо директивы в .htaccess, чтобы сообщить Apache, чтобы он «расслабился» из-за отсутствия файлов по умолчанию в каталогах и просто оставил это для переписывания мода?

Вот как я обычно настраиваю свой скрипт mod_rewrite в файле .htaccess

<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>

Надеюсь, это поможет!

В документация для директивы 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" является последним, он должен делать то, что вы хотите.