Настройка файла по умолчанию в PHP: все способы и нюансы

Раздел: Основы PHP -> Основы PHP

Настройка файла по умолчанию в PHP

Как сделать так, чтобы при открытии сайта автоматически загружался PHP файл?

Основное решение - использование директивы DirectoryIndex веб-сервера. Чаще всего сервер ищёт index.php, но порядок можно изменить. Наиболее эффективный способ - через файл .htaccess в корне проекта.

DirectoryIndex index.php index.html

Php форматы данных (форматы данных в php (json, xml, serialize))

Этот код указывает серверу (Apache) загружать сначала index.php, а если его нет - index.html. Порядок важен: чем левее, тем выше приоритет.

Проблема: после добавления .htaccess сайт выдаёт ошибку 500 Internal Server Error.

Причина: модуль mod_rewrite или mod_autoindex может быть отключён. Решение - проверить настройки Apache или использовать другой способ (через httpd.conf).

Цель: обеспечить единую точку входа для PHP приложения, например, для фреймворков (Laravel, Symfony). Случай использования: любой проект, где маршрутизацией управляет один файл.

Вариант 1: Глобальная настройка через httpd.conf

Как определить файл по умолчанию для всех сайтов на сервере?

<IfModule dir_module>
    DirectoryIndex app.php index.php index.html
</IfModule>

Php null false (null и false в php)

В конфигурационном файле Apache (httpd.conf или apache2.conf) директива действует глобально. После изменений требуется перезагрузка сервера.

Проблема: на общем хостинге нет доступа к httpd.conf.

Решение: использовать .htaccess, если разрешено директивой AllowOverride.

Цель: централизованное управление для мультисайтовых конфигураций.

Вариант 2: Настройка в Nginx

Как задать файл по умолчанию для сервера Nginx?

В блоке server или location используется директива index.

server {
    listen 80;
    server_name example.com;
    root /var/www/project;
    index index.php index.html;
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
}

Php get started (начало работы с php)

Порядок файлов в директиве index определяет приоритет. Если не указать, Nginx может вернуть 403 при отсутствии файла.

Ошибка: при обращении к директории без index и при включённом autoindex показывается список файлов.

Решение: добавить autoindex off; в конфигурацию.

Вариант 3: Встроенный сервер PHP (PHP CLI)

Как задать файл по умолчанию при разработке с php -S?

Встроенный сервер по умолчанию использует index.php или index.html. Изменить это можно с помощью маршрутизирующего скрипта.

php -S localhost:8000 router.php

Custom index php (создание собственного index.php)

В файле router.php можно определить логику загрузки другого файла:

$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if ($uri === '/' && file_exists(__DIR__ . '/main.php')) {
    require __DIR__ . '/main.php';
    return true;
}
return false;

Php структура данных (изучение структур данных в php)

Проблема: без роутера сервер может показать ошибку 404, если файл отсутствует.

Решение: создать обработчик, возвращающий false для передачи управления статическим файлам.

Вариант 4: Файл .user.ini (для CGI/FastCGI)

Как настроить файл по умолчанию для отдельных директорий без прав на .htaccess?

Некоторые хостинг-провайдеры поддерживают .user.ini в корне проекта.

; .user.ini
; нестандартный подход, иногда работает через auto_prepend_file
; но напрямую DirectoryIndex не задаётся.

Этот метод не является прямым, поэтому менее надёжен. Лучше комбинировать с другими способами.

Ошибка: .user.ini может не учитываться сервером.

Решение: обратиться к документации хостинга.

- Php return file (возврат файла из функции в php)
- File php query (запрос к файлу в php)
- File c index php (файл index.php в php)

Расширенные примеры настройки файла по умолчанию

Пример 1: Множественные индексы с резервными страницами

Задача: если нет index.php, загружать index.html, а если и его нет - показывать maintenance.php.

Пример
# .htaccess
DirectoryIndex index.php index.html maintenance.html
При обращении к /: сначала ищется index.php -> затем index.html -> затем maintenance.html.

Пример 2: Перенаправление на конкретный файл для разных поддоменов

Пример
# Nginx сервер для API
server {
    listen 80;
    server_name api.example.com;
    root /var/www/api;
    index api.php;
    location / {
        try_files $uri $uri/ /api.php?$query_string;
    }
}

Результат: все запросы к api.example.com обрабатываются через api.php.

Пример 3: Встроенный сервер PHP с условным индексом

Пример
// router.php
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if ($uri === '/' && file_exists(__DIR__ . '/public/index.php')) {
    require __DIR__ . '/public/index.php';
    return true;
} elseif (preg_match('/\.php$/', $uri) && file_exists(__DIR__ . $uri)) {
    return false;
}
http_response_code(404);
echo '404 Not Found';
Запуск: php -S localhost:8000 router.php
При обращении к / загружается public/index.php, а запросы к другим PHP файлам обрабатываются как обычно.

Пример 4: Использование FallbackResource в Apache (нестандартный подход)

Пример
# .htaccess
FallbackResource /index.php

Эта директива (доступна в Apache 2.2.16+) заменяет DirectoryIndex для всех запросов, которые не соответствуют существующему файлу. Подходит для одностраничных приложений (SPA). Результат: любой несуществующий путь отдаётся index.php.

Пример 5: Управление порядком через переменные окружения

Пример
# httpd.conf
SetEnvIf Host "^dev\.example\.com$" DEFAULT_INDEX=dev.php
<Directory /var/www/project>
    DirectoryIndex index.php ${DEFAULT_INDEX}
</Directory>

Позволяет динамически менять файл по умолчанию в зависимости от домена.

Пример 6: Ошибка 403 при отсутствии индекса - исправление

Если сервер не находит ни одного файла из списка DirectoryIndex, он возвращает 403 Forbidden. Чтобы этого избежать, добавить резервный файл или отключить проверку.

Пример
# .htaccess
DirectoryIndex index.php
# Если index.php нет, показывать ошибку 403. Альтернатива:
ErrorDocument 403 /error.php
# или создать пустой index.php.
При отсутствии index.php будет вызван error.php, который можно оформить как страницу с сообщением.

Файл по умолчанию в PHP - comments

En
Default php file (php)