Назад | Перейти на главную страницу

Локальный .htaccess странным образом разрешил запуск PHP в режиме CGI / FastCGI в Apache в среде общего хостинга

Я использую общий веб-хостинг. Запуская phpinfo, я вижу, что серверный API показывает CGI / FastCGI, а не Apache 2 Handler.

В этой статье: http://docs.joomla.org/Should_PHP_run_as_a_CGI_script_or_as_an_Apache_module%3F

В нем говорится: «Если ваш сервер настроен для запуска PHP в качестве модуля Apache, тогда у вас будет выбор использовать файлы php.ini или Apache .htaccess, однако, если ваш сервер запускает PHP в режиме CGI, у вас будет только выбор использования файлов php.ini локально для изменения настроек, поскольку Apache больше не полностью контролирует PHP ».

Мне кажется действительно странным, что правила перезаписи в созданном мною .htaccess отлично работают, пока он работает в режиме CGI. Почему это происходит?

Проблема не в том, что правила перезаписи Apache в .htaccess файл не будет работать при запуске PHP как CGI по сравнению с модулем Apache. Просто ты не можешь использовать .htacess файл для установки значений PHP, когда он запускается как CGI. Вместо этого у вас должен быть отдельный файл php.ini, в котором были изменены ваши настройки. В моей учетной записи общего хостинга, в которой PHP работает как CGI, я использую FastCGI и в моем .htaccess файл:

<IfModule !mod_php.so>
    AddHandler myphp-script .php
    Action myphp-script /cgi-bin/myphp.fcgi
</IfModule>

Тогда в моих аккаунтах /cgi-bin/ каталог я помещаю myphp.fcgi сценарий с chmod 755 содержащий:

#!/bin/sh

# This ensures PHP doesn't try to run it's own
# process manager.  
export PHP_FCGI_CHILDREN=0

# Execute PHP with my php.ini config file
exec /path/to/system/cgi-bin/php -c ~/myconf/php.ini

У меня все еще есть <IfModule mod_rewrite.c> раздел в моем .htaccess файл для обработки перезаписи некоторых старых путей URI в новую структуру URI для сохранения старых ссылок, которые кэшируются в поисковых системах.