簡體   English   中英

Nginx重寫為symfony2無法正常工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM