Nginx 为所有 .HTML 请求提供一个特定的 PHP 脚本

Nginx 为所有 .HTML 请求提供一个特定的 PHP 脚本

简而言之,patch.php每次有人请求此站点上的 html 页面时,我都需要运行一个特定的 php 文件……

我们最近从 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;
    }

这比我前几次尝试要好得多,但是,它不起作用 - 奇怪的是,它告诉我“访问被拒绝” - 这不是通常的错误页面,但所有权和权限是正确的,所以我认为这无关。

所以,我真的很想知道我做错了什么---提前谢谢--!

答案1

您可以将所有请求重定向到单个 php 文件/url:

  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;

答案2

解决您问题的一个可能方法。

该解决方案假定您的 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;
    }
}

permanent第一个位置块匹配所有以 htm/html 后缀结尾的文件,并进行内部重写以将它们全部传递给 /patch.php。这与使用(301) 或(302) 修饰符时发送的 HTTP 重定向无关redirect,因此对 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;
}

答案3

更改 Web 服务器的配置,使.html文件解析为 PHP。我不会详细介绍如何执行此操作,因为已经有很多指南了。

然后更改您的php.ini并添加auto-prepend-fileauto-append-file

相关内容