总之,我需要运行一个特定的PHP文件, patch.php ,每次有人要求在这个网站上的HTML页面…
我们最近从Apache服务器转移到Nginx服务器,一切都很好。 然而,这个看起来像是年代久远的网站有一个非常奇特的模式:
所有页面上的所有链接链接到.html文件,但html文件缺less页眉和页脚
我不确定这个网站以前是如何工作的,但是我看到要解决这个问题的方法是简单地告诉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; }
这比我的第一次尝试要好得多,但是不起作用 – 奇怪的是,它告诉我“访问被拒绝” – 这不是通常的错误页面,但所有权和权限是正确的,所以我不认为这是相关的。
所以,我真的很想知道我在做什么错了—先谢谢了!
您可以将所有请求redirect到单个php文件/ url:
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;
解决您的问题的一个可能的方法
此解决scheme假定您的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。 这与使用permanent (301)或redirect (302)修饰符时发送的HTTPredirect无关,所以这对SEO没有任何影响。
第二个位置告诉通过PHP实例处理/patch.php 。 如果你想启用PHP脚本的一般处理,你应该使用它:
location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; }
以.html文件parsing为PHP的方式更改Web服务器的configuration。 我不会详细介绍如何做到这一点,已经有很多指导。
然后,改变你的php.ini并添加auto-prepend-file和auto-append-file 。