nginx是redirect而不是重写的时候有一个斜杠参数

我有以下位置块,作为CMS的复杂路由的一部分:

location @mylocation { if (-d $request_filename) { rewrite ^/(.*)$ /$controller/$siteName last; break; } if ($request_filename !~ "\.(js|htc|ico|gif|jpg|png|css)$") { rewrite ^/(.*)$ /$controller/$siteName/$1 last; } } 

$controller就像“index.php”, $siteName是一个散列,标识在cms中的特定网站。

它工作正常,nginx重写http://www.mydomain/path?somearg=somethinghttp://www.mydomain/index.php/HASH/path?somearg=something

但是当我有一个这样的URL http://www.mydomain/path/?somearg=something nginxredirect(301)到http://www.mydomain/index.php/HASH/path?somearg=something ,和索引.php和HASH都是暴露的。

我尝试了这样的事情:

  location @mylocation { if (-d $request_filename) { rewrite ^/(.*)$ /$controller/$siteName last; break; } if ($request_filename ~ "") { #not sure what to put here } if ($request_filename !~ "\.(js|htc|ico|gif|jpg|png|css)$") { rewrite ^/(.*)$ /$controller/$siteName/$1 last; } } 

但是我不确定要在第二个块中放置什么,以避免redirect。

任何帮助表示赞赏,谢谢。

你确定这不是生成redirect的CMS吗? 你的configuration或者nginx的工作方式都不会产生这种反应。

让我们尝试删除尾部的斜线(如果存在的话),看看是否安抚CMSredirect?

 if ($request_filename !~ "\.(js|htc|ico|gif|jpg|png|css)$") { rewrite ^/(.*?)/?$ /$controller/$siteName/$1 last; }