动态网址段的Nginx位置块

Vin*_*ein 5 php nginx

我的PHP应用程序通过url中的关键字manage自动检测到请求路由到管理区域,即:

http://example.com/manage

该目录实际上并不存在.

请求应该路由到index.php文件,该文件在初始请求上进行管理/但是任何链接都会产生"未指定输入文件".nginx中的错误.

我需要一个可以在不存在的url段上工作的位置块.

我尝试将其重写为主索引文件,如下所示:

location /manage {
    try_files $uri $uri/ @back;
}

location @back {
    rewrite ^/manage/(.*)$ /index.php?_route_=$1 last;
}
Run Code Online (Sandbox Code Playgroud)

这适用于Apache,但在Nginx中,这会产生500错误.

任何建议,将不胜感激.

更新:

评论中要求完整配置:

upstream myapp {
    server unix:/srv/users/serverpilot/run/myapp.php-fpm.sock;
}

server {
    listen 80;
    server_name my.domain.com;

    root /srv/users/serverpilot/apps/myapp/public;
    index index.php index.html index.htm;

    access_log /srv/users/serverpilot/log/myapp/myapp_nginx.access.log;
    error_log  /srv/users/serverpilot/log/myapp/myapp_nginx.error.log;

    location /asset {
        rewrite ^/asset/(.*)$ /public/asset/$1 break;
    }

    location /image {
        rewrite ^/image/(.*)$ /public/image/$1 break;
    }

    location / {
        try_files $uri $uri/ @front;
    }

    location @front {
        rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }

    location ~ \.php$ {
        include fastcgi.conf;
        fastcgi_pass myapp;
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:

请求错误日志.

15/05/14 10:42:04 [error] 32704#0: 
*5 FastCGI sent in stderr: 
"Unable to open primary script: /srv/users/username/apps/myapp/public/manage/index.php (No such file or directory)" 
while reading response header from upstream, client: 129.349.569.789, 
server: myapp.example.com, 
request: "GET /manage/index.php?route=common/forgotten HTTP/1.1", 
upstream: "fastcgi://127.0.0.1:9002", 
host: "myapp.example.com", 
referrer: "http://myapp.example.com/manage"
Run Code Online (Sandbox Code Playgroud)

更新:

请求的.htaccess文件:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)/$ /$1 [L,R=301]
    RewriteRule ^asset/(.*)$ public/asset/$1 [L,QSA]
    RewriteRule ^image/(.*)$ public/image/$1 [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !.*\.(ico|gif|jpg|jpeg|png|txt|html|woff|ttf|eot|svg|css|js)
    RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

Vin*_*ein 0

事实证明它一直就在我眼皮子底下。

upstream myapp {
    server localhost:9002;
}

server {
    listen 80;
    server_name myapp.example.com;

    root /srv/users/serverpilot/apps/myapp/public;
    index index.html index.htm index.php;

    access_log /srv/users/serverpilot/log/myapp/myapp_nginx.access.log;
    error_log  /srv/users/serverpilot/log/myapp/myapp_nginx.error.log;

    location / {
        try_files $uri $uri/ @front;
    }

    location ~ ^/manage {
        rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }

    location ~ \.php$ {
        include fastcgi.conf;
        fastcgi_pass myapp;
    }

    location @front {
        rewrite ^/(.+)$ /index.php?_route_=$1 last;
    }
}
Run Code Online (Sandbox Code Playgroud)

感谢@Dayo 的所有帮助。