Файлы XAMPP в папке htdocs: от основ до продвинутой настройки

Раздел: Администрирование серверов -> Локальный сервер

Основные принципы работы с папкой htdocs и файлом index.php

Наиболее эффективное решение: размещение проекта непосредственно в htdocs и настройка index.php как точки входа

По умолчанию Apache в XAMPP обслуживает все файлы из директории htdocs. Когда вы обращаетесь к http://localhost, сервер ищет файл index.php (или index.html) в корне htdocs. Это стандартный способ запуска PHP-проекта.

Пример простого index.php:

<?php
echo 'Привет, мир!';
?>

Localhost home php (домашняя страница на localhost)

Результат: браузер отобразит Привет, мир!. Для просмотра созданных файлов достаточно поместить их в C:\xampp\htdocs\ (Windows) или /opt/lampp/htdocs/ (Linux) и открыть http://localhost/имя_файла.

Это решение подходит для:

  • Быстрого тестирования простых скриптов
  • Разработки одного проекта без изоляции
  • Обучения основам PHP

Как организовать несколько проектов в htdocs без конфликтов?

Создайте подпапки внутри htdocs для каждого проекта. Например: htdocs/project1/, htdocs/project2/. Тогда доступ к проектам будет через http://localhost/project1/.

htdocs/
  ├── project1/
  │   └── index.php
  └── project2/
      └── index.php

Www localhost php (доступ к php через www.localhost)

В каждом index.php пропишите относительные пути для ресурсов (CSS, JS). Проблема: относительные ссылки могут вести на корень localhost, а не на папку проекта. Решение: используйте $_SERVER['REQUEST_URI'] или базовый URL через <base href="/project1/">.

Ошибка: файл не найден (404), если путь указан с ошибкой или регистр не совпадает (на Windows регистр не важен, на Linux – важен).
Решение: проверяйте точное имя каталога и файлов, используйте error_reporting(E_ALL) для отладки.

Как настроить виртуальные хосты, чтобы каждый проект имел свой домен (например, project1.local)?

Отредактируйте конфигурацию Apache: C:\xampp\apache\conf\extra\httpd-vhosts.conf (или /opt/lampp/etc/extra/httpd-vhosts.conf). Добавьте:

<VirtualHost *:80>
    DocumentRoot "C:/xampp/htdocs/project1"
    ServerName project1.local
</VirtualHost>

Localhost php site (сайт на localhost)

Затем в файле hosts (C:\Windows\System32\drivers\etc\hosts или /etc/hosts) пропишите:

127.0.0.1   project1.local

Xampp htdocs index php (файлы xampp в папке htdocs)

Перезапустите Apache. Теперь по адресу http://project1.local откроется проект из папки project1.

Ошибка: Forbidden (403) из-за неправильных прав доступа. Решение: убедитесь, что для каталога DocumentRoot разрешено чтение, и в конфигурации указана директива Require all granted.

Как изменить корневую директорию htdocs на другую папку (например, D:\MySites)?

Измените DocumentRoot в основном файле httpd.conf. Найдите строку DocumentRoot "C:/xampp/htdocs" и замените на нужный путь. Также измените соответствующую секцию <Directory>:

DocumentRoot "D:/MySites"
<Directory "D:/MySites">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

Перезапустите Apache. Теперь localhost будет показывать содержимое новой папки.

Ошибка: Apache не запускается из-за синтаксической ошибки в конфигурации. Решение: выполните проверку синтаксиса командой httpd -t в папке C:\xampp\apache\bin.

Как использовать .htaccess для переопределения правил маршрутизации и обработки ошибок?

Файл .htaccess размещается в корне проекта (или в htdocs). Пример редиректа с index.php на корень:

RewriteEngine On
RewriteRule ^index\.php$ / [R=301,L]

Другой пример: обработка ошибки 404 своей страницей:

ErrorDocument 404 /404.php

Убедитесь, что модуль mod_rewrite включён в httpd.conf (строка LoadModule rewrite_module modules/mod_rewrite.so не должна быть закомментирована).

Ошибка: 500 Internal Server Error из-за неправильного синтаксиса в .htaccess. Решение: проверьте логи Apache (папка C:\xampp\apache\logs\error.log) для выяснения причины.

Как работать с несколькими версиями PHP для разных проектов в XAMPP?

XAMPP поставляется с одной версией PHP. Для использования другой версии можно установить дополнительный XAMPP в другую папку или воспользоваться PHP Switch (если доступен) в панели управления XAMPP. Альтернатива: запускать встроенный PHP-сервер из командной строки с нужной версией, если она установлена отдельно.

Пример запуска встроенного сервера PHP 8.2 для проекта:

C:\xampp\php\php.exe -S localhost:8080 -t D:\project

Этот сервер не требует Apache и может работать параллельно.

Проблема: порт 80 или 443 занят другим веб-сервером (Skype, IIS). Решение: измените порты в httpd.conf на, например, 8080 и 4433, или отключите другие службы.

Расширенные примеры работы с htdocs и index.php

Ниже приведены подробные примеры, которые помогут глубже понять возможности настройки.

Пример 1: Простой роутер на PHP в index.php для многостраничного сайта

Создайте файл htdocs/router/index.php со следующим кодом:

Пример
<?php
$request = $_SERVER['REQUEST_URI'];
switch ($request) {
    case '/':
        echo 'Главная страница';
        break;
    case '/about':
        echo 'О нас';
        break;
    case '/contact':
        echo 'Контакты';
        break;
    default:
        http_response_code(404);
        echo 'Страница не найдена';
        break;
}
?>

Результат: при обращении к http://localhost/router/ выводится «Главная страница», к /router/about – «О нас». Для работы без .php в URL необходимо добавить .htaccess:

Пример
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]

Теперь URL http://localhost/router/about будет обрабатываться index.php.

Вывод в браузере при переходе на /router/about: «О нас»

Пример 2: Настройка виртуального хоста с поддержкой SSL (HTTPS) для локальной разработки

Сгенерируйте самоподписанный сертификат с помощью OpenSSL, который входит в XAMPP:

Пример
cd C:\xampp\apache\bin
openssl req -new -x509 -days 365 -nodes -out server.crt -keyout server.key

Затем создайте виртуальный хост, слушающий порт 443:

Пример
<VirtualHost *:443>
    DocumentRoot "C:/xampp/htdocs/secure-site"
    ServerName secure.local
    SSLEngine on
    SSLCertificateFile "C:/xampp/apache/conf/ssl.crt/server.crt"
    SSLCertificateKeyFile "C:/xampp/apache/conf/ssl.key/server.key"
</VirtualHost>

Не забудьте добавить 127.0.0.1 secure.local в файл hosts. После перезапуска Apache сайт будет доступен по HTTPS (браузер покажет предупреждение о небезопасном соединении – это нормально для локального тестирования).

Пример 3: Отладка PHP-ошибок в XAMPP

Для вывода всех ошибок на экран добавьте в начало index.php:

Пример
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

Если ошибки не отображаются, проверьте, не отключено ли это в php.ini (файл находится в C:\xampp\php\php.ini). Найдите строки:

Пример
display_errors = On
display_startup_errors = On

После изменений перезапустите Apache. Пример ошибочного кода:

Пример
<?php
echo $undefinedVariable;
?>
Вывод:
Notice: Undefined variable: undefinedVariable in C:\xampp\htdocs\test.php on line 2

Пример 4: Использование Composer в проекте внутри htdocs

Установите Composer глобально или поместите composer.phar в корень проекта. Создайте composer.json:

Пример
{
    "require": {
        "phpmailer/phpmailer": "^6.8"
    }
}

Выполните в командной строке из папки проекта:

Пример
composer install

Появится папка vendor. В index.php подключите автозагрузчик:

Пример
<?php
require_once 'vendor/autoload.php';
use PHPMailer\PHPMailer\PHPMailer;
$mail = new PHPMailer();
echo 'PHPMailer установлен успешно';
?>

Результат: на странице будет сообщение об успешной установке. Убедитесь, что папка vendor не исключена веб-сервером (по умолчанию доступ открыт).

Пример 5: Перенаправление всех запросов на index.php через .htaccess (Front Controller)

Создайте файл .htaccess в корне проекта:

Пример
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

А в index.php:

Пример
<?php
$url = $_GET['url'] ?? '/';  // '/about', '/posts/123'
echo 'Запрошенный маршрут: ' . htmlspecialchars($url);
?>

Результат: при вводе http://localhost/myapp/about в адресной строке будет выведено «Запрошенный маршрут: about». Этот подход широко используется в фреймворках (Laravel, Symfony).

В браузере: Запрошенный маршрут: about

Пример 6: Изменение лимитов в php.ini для загрузки больших файлов

Если проект требует загрузки файлов до 100 МБ, отредактируйте php.ini:

Пример
upload_max_filesize = 100M
post_max_size = 105M
max_execution_time = 300

Проверьте изменения через файл info.php:

Пример
<?php phpinfo(); ?>

Разделы «upload_max_filesize» и «post_max_size» должны отображать новые значения. При несоответствии перезапустите Apache.

Файлы XAMPP в папке htdocs - comments

En
Xampp htdocs index php (php)