我有以下位置块,作为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=something
到http://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; }