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

Nginx обслуживает один конкретный скрипт PHP для всех запросов .HTML

Короче говоря, мне нужно запустить определенный файл 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:

  1. настроить nginx для обслуживания вашего patch.php (что-то вроде):

location /patch\.php { fastcgi_pass unix:/path/to/your/php-fastcgi.socket; fastcgi_param SCRIPT_FILENAME /path/to/your/file/patch.php; }

  1. перенаправить все запросы на свой patch.php

rewrite ^(.*)$ /patch.php break;

Измените конфигурацию вашего веб-сервера таким образом, чтобы .html файлы анализируются как PHP. Я не буду вдаваться в подробности, как это сделать, руководств уже существует.

Затем измените свой php.ini и добавить auto-prepend-file и auto-append-file.