Я использую общий веб-хостинг. Запуская 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 для сохранения старых ссылок, которые кэшируются в поисковых системах.