Короче говоря, мне нужно запустить определенный файл php, patch.php
, каждый раз, когда кто-то запрашивает html-страницу на этом сайте ...
Недавно мы перешли с сервера Apache на сервер Nginx, и все прошло отлично. Однако этот сайт, который выглядит так, как будто он был написан много лет назад, имеет очень своеобразную схему:
Все ссылки на всех страницах ссылаются на файлы .html, но в файлах html отсутствуют верхний и нижний колонтитулы.
Я не уверен, как этот сайт работал раньше, но я вижу способ исправить это - просто сказать nginx, что каждый раз, когда кто-то запрашивает html-файл, просто обслуживайте его php-файл, который будет включать заголовок, страницу, которую они хотят, и нижний колонтитул.
Но мои попытки пока не увенчались успехом. Из этот вопрос, я сделал следующее:
location ~\.(htm|html)$ {
root /home/www-dev/domain.com/web;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index patch.php; #the patch file I want to run for all html
include fastcgi_params;
}
Это было намного лучше, чем мои первые несколько попыток, но это не работает - как ни странно, он сообщает мне «Доступ запрещен» - это не то, как выглядит обычная страница с ошибкой, но право собственности и разрешения верны, поэтому Я не думаю, что это связано.
Итак, я действительно хотел бы знать, что я делаю не так --- заранее спасибо!
Одно из возможных решений вашей проблемы.
Это решение предполагает, что ваш patch.php находится в /home/www-dev/nasa.gov/web/patch.php
файл.
server {
server_name your.domain.name;
root /home/www-dev/nasa.gov/web;
rewrite \.(htm|html)$ /patch.php break;
location /patch.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
}
}
Первый блок местоположения соответствует всем файлам, заканчивающимся суффиксом htm / html, и выполняет внутреннюю перезапись, чтобы передать их все в /patch.php. Это не имеет ничего общего с перенаправлениями HTTP, которые отправляются при использовании permanent
(301) или redirect
(302), поэтому он не влияет на SEO.
Вторая локация сообщает, что нужно обработать /patch.php
через экземпляр PHP. Если вы хотите включить общую обработку скриптов PHP, вы должны использовать вместо этого:
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
Вы можете перенаправить весь запрос в один файл / URL-адрес php:
location /patch\.php {
fastcgi_pass unix:/path/to/your/php-fastcgi.socket;
fastcgi_param SCRIPT_FILENAME /path/to/your/file/patch.php;
}
rewrite ^(.*)$ /patch.php break;
Измените конфигурацию вашего веб-сервера таким образом, чтобы .html
файлы анализируются как PHP. Я не буду вдаваться в подробности, как это сделать, руководств уже существует.
Затем измените свой php.ini
и добавить auto-prepend-file
и auto-append-file
.