У меня есть следующий блок местоположения как часть сложной маршрутизации для 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
nginx перенаправляет (301) на http://www.mydomain/index.php/HASH/path?somearg=something
, а также index.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;
}
}
Но я не уверен, что поставить во второй блок if, чтобы избежать перенаправления.
Любая помощь приветствуется, спасибо.
Вы уверены, что перенаправление генерирует не CMS? Ничто в вашей конфигурации или в том, как работает nginx, не вызовет такого ответа.
Давайте попробуем отбросить завершающую косую черту, если она существует, и посмотрим, убережет ли это CMS от перенаправления?
if ($request_filename !~ "\.(js|htc|ico|gif|jpg|png|css)$") {
rewrite ^/(.*?)/?$ /$controller/$siteName/$1 last;
}