现在我在我的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子句,但仍然没有成功。
好吧,如果有人想知道,这是解决方案,简单地合并两个位置块在一起,然后添加break;到重写迫使所有内容都转到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脚本中,从那里开始做任何你想做的事情
实际上您不需要重写规则,因为每个请求都被发送到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;
}
$uri仅用于资产支持,如果找到图像和静态文件,则直接提供而不传递给parse.php,否则将传递给parse.php
location / {
try_files $uri /parse.php$request_uri;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
}