如何从nginxconfiguration$ uri中删除位置块?

我在我的ngix conf文件中有一个重写,除了它似乎包含位置块作为$ urivariables的一部分,它可以正常工作。 我只想要位置块后的path。 我目前的configuration代码是:

location /cargo { try_files $uri $uri/ /cargo/index.php?_REWRITE_COMMAND=$uri&args; } 

使用http://localhost/cargo/testpage的示例URLredirect工作,但是我的php文件收到的“_REWRITE_COMMAND”参数的值是“/ cargo / testpage”。 我需要去掉位置块,只需要“testing页”作为$ uri

我很确定有一个正则expression式语法分裂$ uri并将其分配给一个新的variables使用$ 1 $ 2等,但我找不到任何示例做一个variables分配使用正则expression式不是重写的一部分声明。 我一直在寻找和尝试几个小时,我似乎无法通过这最后一步。

我也知道我可以在应用程序代码中删除它,但是我想试图修复它在nginx conf中的原因是出于兼容性原因,因为它也在Apache上运行。 我也应该说,我已经想出了一个非常冒险的方法来做到这一点,但它涉及到一个“如果”的声明来检查文件的存在和文件明确表示这样做。

环顾四周我会猜测,使用捕获正则expression式的位置是最简单的。 调整您的示例我最终:

 location ~ ^/cargo(.*) { try_files $1 $1/ /cargo/index.php?_REWRITE_COMMAND=$1&args; } 

我发现另一件事情对我有用(因为我使用gunicorn,我不能select通过什么)

你应该可以逃避

 location /cargo { rewrite ^/cargo(.*)$ $1 break; try_files $uri $uri/ /cargo/index.php?_REWRITE_COMMAND=$uri&args; }