Сделать расширение файла интерпретируется PHP
Я добавил это в мой .htaccess файл:
AddHandler fcgid-script .test
(Я использую FastCGI/VirtualMin/WebMin)
И упаковал файл test.test с содержимым;
<?php echo "test"; ?>
В результате появляется внутренняя ошибка сервера и это сообщение в журнале ошибок:
[Thu Apr 16 14:12:57.631287 2015] [fcgid:warn] [pid 2646] (104)Connection reset by peer: [client xxxx:53595] mod_fcgid: error reading data from FastCGI server
[Thu Apr 16 14:12:57.631402 2015] [core:error] [pid 2646] [client xxxx:53595] End of script output before headers: test.test
Что я делаю неправильно? Я пытался использовать разные имена обработчиков, такие как x-httpd-php или x-httpd-php5, но это ничего не делает.
Я также пробовал:
<FilesMatch "\.test$">
SetHandler fcgid-script
</FilesMatch>
но он имеет ту же внутреннюю ошибку сервера.
Ответы
Ответ 1
Проверено и проверено на работу:
Поскольку вы упомянули, что используете Webmin, я адаптировал свой ответ для Webmin. Вы можете сделать это, отредактировав конфигурацию Apache через оболочку.
Отмечу, что обычно лучше редактировать конфигурацию Apache, и в этом случае, вероятно, неизбежно, так как я не думаю, что вы можете сделать это редактирование в .htaccess
. Хотя может быть и хак, с которым я не знаком, администратор сервера, вероятно, захочет сохранить эту блокировку внутри конфигурации Apache. Мысли файлов .htaccess
с расширениями файлов-изгоев, которые распространяются по всей директории, не только звучат медленно, но и очень небезопасны.
Действия
Я установил Apache на Ubuntu 14.04 через VirtualBox. Я добавил Webmin и FastCGI.
Я сделал следующие шаги:
- Войдите в Webmin, перейдите на свой виртуальный хост.
- Нажмите Изменить директивы
- Добавьте нижеследующее:
<Directory />
#Your SetHandler script here
#(@MrTux script works here but NOT IN .htaccess)
Require all granted
</Directory>
- Нажмите "Сохранить"
- Нажмите "Применить изменения" вверху.
- Все готово!
Я хочу отметить, что SetHandler передает некоторые заголовки, поэтому, если вы объявляете это в .htaccess
, есть вероятность, что заголовки уже отправлены, что и вызывает вашу ошибку. Опять же, .htaccess
не является предпочтительным способом установки правил, если у вас есть контроль над вашей системой. В этом случае это, вероятно, вызовет проблемы безопасности.
Ответ 2
Кажется, что модуль FastCGId не знает, как выполнить команду script - FcgidWrapper, кажется, отсутствует (поскольку ваш PHP script не имеет Shebang).
В зависимости от вашего дистрибутива вы должны настроить его вручную или вы можете настроить существующую директиву, которая уже обрабатывает файлы .php, также обрабатывать файлы .test(обычно это должно выполняться с помощью директивы SetHandler fcgid- script " и установка/дублирование директивы FcgidWrapper).
Скорректированный пример (взятый из https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#examples):
<FilesMatch "\.test$">
AddHandler fcgid-script .test
</FilesMatch>
Options +ExecCGI
FcgidWrapper /usr/bin/php5-cgi .test
Дополнительная информация и примеры: https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#examples и http://tltech.com/info/php-on-fcgid/
Другие проблемы могут быть основаны на разрешениях, например. если вы используете suexec, что процесс fastcgid не может записывать в журналы или не может выполнить оболочку script. Здесь было бы очень полезно, если бы вы могли указать, правильно ли выполняются нормальные .php файлы.
Ответ 3
Попробуйте использовать это в файле htaccess
AddType application/x-httpd-php .test
См. этот вопрос: Проблема с выполнением скриптов CGI в Apache.
Ответ 4
Я не парень fastcgi. я googled проблема. У меня есть 2 похожих вопроса, размещенных в virtualmin
. Я просто добавляю ответ, размещенный там.
https://www.virtualmin.com/node/34903
- перейти на виртуальный сервер\ваш виртуальный сервер\конфигурация сервера\параметры сайта \
- выберите "Apache mod_php (запустится как пользователь Apache)", затем сохраните
- выключить "FCGId (запустить как владелец виртуального сервера)" (он попросит вас запустить сценарии CGI в качестве владельца домена)
- Сохранить
https://www.virtualmin.com/node/25539
Перейдите в /home/sitename/fcgi -bin
Используйте команду follpwoing для reset неизменяемого флага
"chattr -i php5.fcgi"
Затем удалите каталоги /home/sitename/etc и/home/sitename/fcgi-bin (убедитесь, что все, что не связано с php и т.д.),
С помощью virtualmin переключитесь обратно в режим apache mod_php, а затем вернитесь в режим FCGId. Сайт должен теперь работать. Не забывайте обрабатывать любые файлы/каталоги в public_html, которые были apache: Обратите внимание, что оба они обычно являются sitename.
Надеюсь, это поможет вам.
Ответ 5
Я задаю обработчик fcgid-script
. Это не обычный обработчик PHP, даже для FCGI. Обычно вы увидите
<FilesMatch "\.test$">
SetHandler application/x-httpd-php
</FilesMatch>
или
<FilesMatch "\.test$">
SetHandler php5-fcgi
</FilesMatch>
Если ни одна из этих работ не работает, убедитесь, что установлен PHP FCGI.
Ответ 6
Для всех сценариев CGI требуется добавить строку Shebang в верхней части script.
Итак, если вы хотите запустить PHP, вы должны включить что-то вроде:
#!/path/to/php
В верхней части вашего script, чтобы он работал