Назад | Перейти на главную страницу

nginx перенаправляет вместо перезаписи, когда перед аргументами стоит косая черта

У меня есть следующий блок местоположения как часть сложной маршрутизации для 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;
}