Конфигурация Apache FallbackResource - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь перенести приложение PHP из Windows IIS в Linux (Debian) с веб-сервером Apache (v2.4).Я успешно изменил свой корень документа на /code/wwwroot и использую файл конфигурации /etc/apache2/sites-available/000-default.conf вместо .htaccess для своей конфигурации (в документах Apache 2.4 сказано использовать файлы конфигурации в /etc/apache2/sites-available, если у вас есть доступ кфайлы конфигурации сервера, которые я делаю).Вот что я использую для своей конфигурации:

    <VirtualHost *:80>
      ServerAdmin webmaster@localhost
      DocumentRoot /code/wwwroot
      <Directory /code/wwwroot>
        Options Indexes FollowSymLinks
        AllowOverride None
        FallbackResource /start.php
      </Directory>
      CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>

Это работает почти так, как я ожидал.Когда запрашиваются файлы, найденные в /code/wwwroot/, они обслуживаются.Если запрошенный файл / путь не существует, start.php запускается и возвращается.Например, если мой запрос localhost/gadgasd.html и т. Д., Он внутренне перенаправляет на start.php.Однако для файлов с расширениями .php, которых нет в Document Root, я получаю 404.Например, если запрос localhost/gadgasd.php, я получаю 404 напрямую от Apache (я надеялся обработать 404 в моем коде, а не в Apache).Это поведение строго ограничено файлами с расширениями .php, которых нет в Document Root.Я очень смущен этим поведением.Я установил правильные пакеты для использования php с apache (apt-get install -y php libapache2-mod-php), и правило FallbackResource работает для всех других расширений файлов.Что я делаю неправильно?Заранее спасибо!

1 Ответ

0 голосов
/ 21 мая 2018

Это похоже на ошибку в Apache и имеет трекер открытых проблем здесь .Существует также обходной путь.

РЕДАКТИРОВАТЬ: В случае, если ссылка когда-либо умирает, обходной путь должен использовать старый mod_rewrite подход следующим образом:

RewriteEngine On
RewriteCond /var/www/%{REQUEST_FILENAME} !-f
RewriteCond /var/www/%{REQUEST_FILENAME} !-d
RewriteRule (.*) start.php
...