У меня есть устаревший веб-сайт, размещенный на 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" является последним, он должен делать то, что вы хотите.