Подключение интерпретатора PHP к Apache как модуль

Подключение интерпретатора языка программирования PHP к веб-серверу Apache как модуль. Эта статья полностью описывает правильное подключение интерпретатора языка программирования PHP к веб-серверу Apache в качестве модуля. Сперва рассмотрим всё по пунктам, а в конце статьи приведён полный код.

Загружаем модуль PHP:

LoadModule php5_module "z:\server\php\php5apache2_4.dll"

Укажем директорию в которой находится PHP (опционально):

PHPIniDir "z:\server\php"

Проверим загружен ли модуль mime:

<IfModule !mime_module>
	Error "Module is not loaded: mod_mime"
</IfModule>

Добавление обработчика

Добавляем непосредственно обработчик php на (опционально) файлы php и php-source для файлов phps. Добавить обработчик можно разными способами и директивами модуля mod_mime. Рассмотрим все возможные директивы добавления обработчиков.

Директива AddHandler

AddHandler application/x-httpd-php .php
AddHandler application/x-httpd-php-source .phps

Файлы, имеющие расширение php будут обслуживаться указанным обработчиком application/x-httpd-php. После добавления этих строк в файл httpd.conf, любой файл, содержащий расширение «.php», будет рассматриваться как программа PHP. Аргумент расширения файла не чувствителен к регистру и может быть определено с или без ведущей точки.

Имена файлов могут иметь несколько расширений, например, exploit.php.jpg, и аргумент расширения заданный в этой директиве будет сравнивается с каждым из них, т.е. php и jpg. После чего будет применён обработчик PHP к этому файлу, что создаёт уязвимость в системе безопасности и несёт потенциальную угрозу. Поэтому перед добавлением обработчика файлов директивой AddHandler надо сперва проверить конечное (финальное) расширение файла, чтобы убедиться, что это именно PHP файл:

<FilesMatch \.php$>
    AddHandler application/x-httpd-php .php .php2 .php3 .php4 .php5 .php6 .phtml
</FilesMatch>
<FilesMatch "\.phps$">
	AddHandler application/x-httpd-php-source .phps
</FilesMatch>

Или если надо добавить расширения .php, .php2, .php3, .php4, .php5, .php6 и .phtml, это можно записать так:

<FilesMatch "\.ph(p[2-6]?|tml)$">
    AddHandler application/x-httpd-php .php .php2 .php3 .php4 .php5 .php6 .phtml
</FilesMatch>

Директива AddType

AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
AddType application/x-httpd-php-source .phps

AddType директива отображает данные расширения имени файла на указанный тип контента. Медиа-типа является тип носителя использовать для имен файлов , содержащих расширение . Это отображение добавлена к любому уже в силе, отвергая любые картографии , которые уже существуют для того же расширения. Можно указать несколько расширений файлов в одной директиве. Аргумент расширение нечувствителен к регистру и может быть определено с или без ведущей точки. Имена файлов могут иметь несколько расширений и аргумент расширения будет сравнивается с каждым из них. Рекомендуется, чтобы новые типы медиа быть добавлены с помощью AddType директивы вместо изменения TypesConfig файла. По сути директива AddType работает так же как и директива AddHandler, только добавляет ещё mime типы. Таким образом перед добавлением обработчика файлов директивой AddType надо так же сперва проверить конечное расширение файла, чтобы убедиться, что это именно файл PHP:

<FilesMatch \.php$>
    AddType application/x-httpd-php .php .php2 .php3 .php4 .php5 .php6 .phtml
</FilesMatch>
<FilesMatch "\.phps$">
	AddType application/x-httpd-php-source .phps
</FilesMatch>

Или если надо добавить расширения .php, .php2, .php3, .php4, .php5, .php6 и .phtml, это можно записать так:

<FilesMatch "\.ph(p[2-6]?|tml)$">
    AddType application/x-httpd-php .php .php2 .php3 .php4 .php5 .php6 .phtml
</FilesMatch>

Директива SetHandler

Данная директива переопределяет обработчики по-умолчанию, поэтому надо указывать в каком случае нужно установить обработчик. В нашем случае устанавливаем обработчик application/x-httpd-php для файлов заканчивающихся на «.php» и обработчик application/x-httpd-php-source для файлов заканчивающихся на «.phps».

<FilesMatch "\.php$">
	SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
	SetHandler application/x-httpd-php-source
</FilesMatch>

Или, если мы хотим добавить расширения .php, .php2, .php3, .php4, .php5, .php6 и .phtml, это можно записать так:

<FilesMatch "\.ph(p[2-6]?|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>

Конечный результат

Таким образом конечный полный, максимально правильный и безопасный код подключения к Apache2 модуля PHP, установка mime типов и задание обработчика будет выглядеть так:

LoadModule php5_module "z:\server\php\php5apache2_4.dll"
PHPIniDir "z:\server\php"

<IfModule !mime_module>
	Error "Module is not loaded: mod_mime"
</IfModule>

<FilesMatch "\.ph(p[2-6]?|tml)$">
    AddType application/x-httpd-php .php .php2 .php3 .php4 .php5 .php6 .phtml
</FilesMatch>
<FilesMatch "\.phps$">
	AddType application/x-httpd-php-source .phps
</FilesMatch>

<FilesMatch "\.ph(p[2-6]?|tml)$">
    AddHandler application/x-httpd-php .php .php2 .php3 .php4 .php5 .php6 .phtml
</FilesMatch>
<FilesMatch "\.phps$">
	AddHandler application/x-httpd-php-source .phps
</FilesMatch>

В это же время минимальный код подключения модуля PHP выглядит так:

LoadModule php5_module "z:\server\php\php5apache2_4.dll"
AddType application/x-httpd-php .php .php2 .php3 .php4 .php5 .php6 .phtml

или так:

LoadModule php5_module "z:\server\php\php5apache2_4.dll"
AddHandler application/x-httpd-php .php .php2 .php3 .php4 .php5 .php6 .phtml

ну или так:

LoadModule php5_module "z:\server\php\php5apache2_4.dll"
PHPIniDir "z:\server\php"
AddHandler application/x-httpd-php .php .php2 .php3 .php4 .php5 .php6 .phtml
AddHandler application/x-httpd-php-source .phps
AddType application/x-httpd-php .php .php2 .php3 .php4 .php5 .php6 .phtml
AddType application/x-httpd-php-source .phps

Ссылки