我是一个nginx的新手,它是重写命令,我真的需要这个帮助。 我一直试图解决这一整天,但没有..
如果用户给这个url:
someurl.com/sub/1.0/healthcheck
我想重写它以指向这里的Symfonys项目文件:
/var/www/sub/1.0/web/app_dev.php
Symfony的url中的“健康检查”。
但是,不。 这里不对劲。 看起来它find了Symfony,但是由于它总是返回,因此url有错误:
找不到路线
即使我从url中省略“健康检查”,它仍会返回相同的错误。 (有一个索引 – “/”作为路由)。
这是当前的Nginxconfiguration:
server { server_name localhost; root /var/www/sub/1.0/web; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; location / { root /var/www/html/; index index.html; } location /sub/1.0/ { index app_dev.php; rewrite ^/sub/1.0/ /app_dev.php last; } location ~ (app|app_dev).php { include fastcgi_params; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; } }
我想出了这一个。 问题是Symfony接受了请求uri,就fastcgi而言,这个请求没有被重写影响。 我添加了“fastcgi_param REQUEST_URI $ uri?$ args;” 和tadaa! 有用!
这是固定的configuration(没有多余的行,比如根位置'/'):
server { root /var/www/sub/1.0/web; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; # If user writes the app_xxx.php into the url, remove it: rewrite ^/app_dev\.php/?(.*)$ /$1 permanent; location /sub/1.0/ { index app_dev.php; rewrite ^/sub/1.0/(.*)$ /app_dev.php/$1 last; return 403; # If the rewrite was not succesfull, return error. } location ~ (app|app_dev).php { include fastcgi_params; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param REQUEST_URI $uri?$args; fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; } }