Мне нужно заставить сервер работать следующим образом:
Проверьте, существует ли запрошенный файл локально.
- если есть, подавайте сразу
- если нет, передайте REQUEST_URI скрипту, который его загрузит
- если файл имеет ?delete=1, вызовите скрипт для его удаления
Я успешно реализовал это поведение с помощью nginx (используя обработчик ошибок 404) и PHP. Дело в том, что для реализации этого на другом сервере мне нужно установить/скомпилировать и nginx, и php.
Мой вопрос в том, есть ли способ удалить php из стека и поставить nginx (или какой-то другой сервер) для выполнения этой работы. Идеальным способом для меня было бы, если бы я мог запускать/вызывать bash-скрипты/команды напрямую с сервера.
Кто-нибудь может указать мне правильное направление?
решение1
То, что вы пытаетесь сделать, можно очень легко сделать с помощью простого CGI и скрипта оболочки. То, как вы включите/реализуете CGI, зависит от сервера. Nginxдолженбыть способным, но я знаю, что Apache может. Обратитесь к документации или задайте конкретный вопрос о включении CGI на данном веб-сервере.
Простая логика bash для проверки существования файла и его отображения:
#!/bin/bash
FILE="/path/to/file"
URI="http://example.com/file"
/bin/echo "Content-type: text/plain"
/bin/echo
if [ -f $FILE ]; then
/bin/cat $FILE
else
/usr/bin/wget $URI
fi
Вы можете разобрать ${QUERY_STRING}, чтобы получить действие удаления. Я оставлю вам полное решение и обработку ошибок в качестве упражнения. Это становится немного сложнее и выходит за рамки нашего формата вопросов и ответов.