Отключенный PHP для одного каталога с HTACCESS (PHP-FPM)

0

Я хочу, чтобы отключить парсинг PHP файлов в определенном каталоге, и выяснил, как сделать это здесь. Проблема в том, что мой сервер использует PHP-FPM, и я получаю Invalid command 'php_flag', perhaps misspelled or defined by a module not included in the server configuration когда я пытаюсь использовать php_flag в файле httpd.conf.

Как я могу отключить синтаксический анализ файлов PHP в заданном веб-каталоге с файлом htaccess/httpd.conf, который расположен над веб-корнем на сервере с использованием PHP-FPM?

Теги:
.htaccess

2 ответа

0

Поскольку Fedora 27 недавно переключился на php-fpm, я тоже столкнулся с этой проблемой. К сожалению, старые способы делать вещи с mod_php не относятся к php-fpm.

Я нашел здесь еще один вопрос, который определенно казался более актуальным:

Apache: отключить php в каталоге

Суть его состояла в том, чтобы использовать блок <directory> и <filesmatch> в вашем файле конфигурации и использовать SetHandler ! для каждого каталога, который вам не нужен, чтобы интерпретировать PHP-код.

например:

<Directory "/path/to/no/phpfiles">
<Files "*.*">
SetHandler !
</Files>
</Directory>

Это проверено и работает на Fedora 27, PHP-FPM 7.1.12.

В отличие от непосредственного использования конфигураций fpm, этот метод работает рекурсивно, поэтому размещая его на верхнем уровне дерева вещей, которое вам не нужно, PHP-интерпретация работает так, как ожидалось.

Я отключил файлы.htaccess в своих конфигурациях, но этот метод все равно должен работать. Однако <directory> недействителен внутри файла .htaccess. Надеюсь, просто удалим его и уйдем:

<Files "*.*">
SetHandler !
</Files>

Должно быть достаточно.

0

Как я могу отключить синтаксический анализ файлов PHP в заданном веб-каталоге с файлом htaccess/httpd.conf, который расположен над веб-корнем на сервере с использованием PHP-FPM?

Вы не можете сдерживать то, как вы его пытаетесь, без mod_php (чего вы не хотите), поэтому вы получаете эту ошибку. PHP-FPM не является модулем Apache. Он работает независимо от Apache. То, что на самом деле оно предназначено для использования на сильно загруженных сайтах и может управлять всеми процессами PHP.

Один из способов, которым вы могли бы достичь этого, - указать точный путь, по которому вы хотите запустить PHP, в вашем файле virtualhost с директивой Directory. Вместо того, чтобы просто иметь материал обработчика PHP, заключите его с директивой Directory с фактическим путем, которым вы хотите его запустить. Вот пример.

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html/
    ErrorLog /var/www/example.com/error.log
    CustomLog /var/www/example.com/access.log combined

    <Directory /path/to/php/only/folder/>
    #then you PHP handler stuff
    <IfModule mod_fastcgi.c>
        AddType application/x-httpd-fastphp5 .php
        Action application/x-httpd-fastphp5 /php5-fcgi
        Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi_example.com
        FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi_example.com -socket /var/run/php5-fpm_example.com.sock -pass-header Authorization
    </IfModule>
     </Directory>
</VirtualHost>

Затем перезапустите Apache. Это должно ограничивать это каталогом. Возможно, вам придется удалить информацию обработчика php из другой конфигурации, чтобы она не была перезаписана.

Примечание. Я не тестировал это решение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню