У меня есть 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, особенно о сопоставлении блоков местоположения. думаю эта статья может быть полезна.