简而言之,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:
- 设置 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; }
- 将所有请求重定向到您的 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-file
和auto-append-file
。