Как отключить выполнение PHP там, где оно есть или включить там, где его нет
Если нужно отключить выполнение php-скриптов в некоторой папке на хосте,
например, в /xampp/htdocs/uploads
(чтобы гипотетические пользователи не смогли загрузить туда исполняемый код), достаточно создать в этой папке файл .htaccess
со следующим содержимым:
php_flag engine 0 RemoveHandler .phtml .php .php2 .php3 .php4 .php5 .php7 .php8 .phps .cgi .pl .asp .aspx .shtml .shtm .fcgi .fpl .htm .html AddType text/plain .phtml .php .php2 .php3 .php4 .php5 .php6 .php7 .php8 .phps .cgi .pl .asp .aspx .shtml .shtm .fcgi .fpl .htm .html
Напоминаем, что файл .htaccess
лучше всегда создавать в однобайтовой ANSI-кодировке.
Чтобы проверить результат, можно поместить в ту же папку файл index.php
с таким содержимым:
<?php $i = 1; echo $i; ?>
и попытаться выполнить его на хосте по URL-адресу вида http://localhost/uploads/
Если всё получилось, мы увидим просто исходный текст скрипта:
<?php $i = 1; echo $i; ?>
а иначе увидели бы единичку:
1
Есть и другой вариант содержимого .htaccess
, более короткий:
<FilesMatch "\.*"> SetHandler none </FilesMatch>
Правда, исходников мы при таком подходе не увидим, а только пустое место.
Своего рода обратная задача - напротив, включить выполнение PHP кода для тех типов файлов, с которыми это обычно не выполняется, например, для файлов .html
, в которые мы решили внести фрагменты PHP-кода, чтобы "оживить" старый статический сайт.
Создадим в нужной папке файл .htaccess
с таким содержимым:
AddType application/x-httpd-php .php .htm .html .tpl
или другой вариант:
<IfModule mod_mime.c> AddType application/x-httpd-php .php AddType application/x-httpd-php .htm AddType application/x-httpd-php .html AddType application/x-httpd-php .tpl </IfModule>
Метод с AddHandler:
AddHandler application/x-httpd-php .php .htm .html .tpl
Метод с SetHandler:
<FilesMatch "\.(php|htm|html|tpl)$"> SetHandler application/x-httpd-php </FilesMatch>
Проверим, что получилось, создав в той же папке uploads
файл index.html
со следующим содержимым:
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8"> <title>Test</title> </head> <body> <?php echo date('d.m.Y'); ?> </body> </html>
Если всё нормально, то, выполнив файл по URL-адресу http://localhost/uploads/index.html
мы получим текущую дату на сервере в формате ДД.ММ.ГГГГ:
25.10.2022
26.10.2022, 00:20 [1273 просмотра]