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

Соответствие местоположения Nginx, если не равно

У меня есть www.example.com/test, и я хочу написать условие, если запрашиваемый URL-адрес не равен / test, выполните перезапись или перенаправление на www.example.com. Ближайший, который я могу получить, - это код ниже, но когда я хочу использовать www.example.com/test без / в конце, он перенаправляет меня на www.example.com, но когда я набираю www.example.com/test/, он работает .

location / 
fastcgi_param  REQUEST_URI $request_uri;
fastcgi_param  HTTPS on;

if ($request_uri !~ ^/test/(.*)$)
{return 301 $scheme://www.example.com;}

   try_files $uri $uri/ /index.php$is_args$args;
}

Nginx Если

Обычно с Nginx вы избегайте использования оператора IF. Это требует больше ресурсов и не всегда работает так, как вы хотите.

Решение

Для этого нужно определить два местоположения: общее и тестовое.

# I just copied this from above, you might want it in a block
fastcgi_param  REQUEST_URI $request_uri;
fastcgi_param  HTTPS on;

# Return permanent redirect for everything other than the /test URL
# Suggest you use 302 until you have this working perfectly. Google / browsers
# caches 301 redirects for a long time
location / {
  return 301 $scheme://www.example.com;
}

location /test {
 try_files $uri $uri/ /index.php$is_args$args;
}

Я думаю, это сработает как для / test, так и для / test /. Если нет, вы можете попробовать это, что может сработать

location ~* /test

Вы должны прочитать, как работает Nginx, особенно о сопоставлении блоков местоположения. думаю эта статья может быть полезна.