[英]Nginx rewrite to symfony2 not working
我是nginx的新手,它是重寫命令,我真的需要一些幫助。 我一整天都試圖解決這個問題,但沒有...
如果用戶提供此網址:
someurl.com/sub/1.0/healthcheck
我想在此重寫它以指向Symfonys項目文件:
/var/www/sub/1.0/web/app_dev.php
網址中的“健康檢查”適用於Symfony。
但不,不。 這里不對勁。 它似乎找到了Symfony但是url有問題,因為它總是返回:
路線未找到
即使我從URL中省略了“healthcheck”,它仍然會返回相同的錯誤。 (有一個索引 - 以“/”作為路徑。)
這是當前的Nginx配置:
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! 有用!
這是固定配置(沒有多余的行,如根位置'/'):
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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.