现在我在我的nginx配置中有这个:
location / {
rewrite ^(.*)$ /parse.php;
}
然后再往下走:
location ~\.php$ {
root /var/www/site.com/public/;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
}
如果我浏览
site.com/example/this
它按照预期进行并转到parse.php($ _SERVER ['REQUEST_URI']正确设置为'/ example / this')。对于site.com/images/test.jpg也是如此,它将按预期工作并将其传递给parse.php脚本。
但是,如果我访问'site.com/another.php',它就不会去解析,而是说:
未指定输入文件。
知道如何让它发挥作用吗?我删除了try_files子句但仍然没有运气。
答案 0 :(得分:0)
好吧,如果有人想知道,这是解决方案,只需将两个位置块合并在一起然后添加中断;重写强制一切都去PHP脚本。
出于某种原因,当两个块都是分开的时,第一个位置(指定所有内容都应该重写为parse.php)被第二个位置覆盖(仅针对php文件)并以某种方式将请求恢复为原始php根据重写文件而不是parse.php。
location / {
rewrite ^(.*)$ /parse.php break;
root /var/www/site.com/public/;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
}
这将有效地解析给定服务器{}块的parse.php的每个请求。
现在您可以通过$ _SERVER ['REQUEST_URI']确定原始请求;在你的parse.php脚本中,从那里做任何你想做的事。
答案 1 :(得分:0)
实际上您不需要重写规则,因为每个请求都会发送到parse.php
。正则表达式很慢。你也可以试试这个:
location / {
root /var/www/site.com/public;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/parse.php;
fastcgi_param SCRIPT_NAME parse.php;
fastcgi_pass 127.0.0.1:9000;
}
答案 2 :(得分:0)
$ uri仅用于资产支持,图像和静态文件将直接提供,如果找到则不会传递给parse.php,否则将传递给parse.php
location / {
try_files $uri /parse.php$request_uri;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
}