Nginx штука не простая, или по крайней мере сильно отличающаяся от Apache, как сделать 301 редирект на nginx?

Нельзя просто взять и написать rewriterule в .htaccess если на сервере nginx, 301 редирект на nginx

Для того, чтобы средствами сервера, а не PHP сделать 301 редирект на nginx необходимо найти конфигурационный файл домена для nginx, и править его. Чувакам, у которых обычный шаред хостинг – не повезло, скорее всего они этого сделать не смогут, зато тем, у кого хотябы VPS – намного легче.

Для правок на потребуется SSH доступ к серверу.

Обычно этот файл лежит по пути:

/etc/nginx/

Тут в зависимости от конфигурации сервера может быть подпапка, а может быть и прямо в этой папке лежит файл с расширением .conf

Нужно найти тот файл, в котором прописана конфигурация вашего домена.

И в нем в секции server {…} внутри фигурных скобок дописать:

if ($host = 'www.site.ru' ) {.
rewrite ^/(.*)$ http://site.ru/$1 permanent;.
}

Эти строчки сделают всё за вас. Как видно из текста происходит проверка переменной $host, и если она равна домену с www то все запросы перенаправляются на домен без www.

Готово. Но сайт работает по старому. Почему? Потому, что nginx ещё не подхватил вашу конфигурацию с правками. Для этого нужно в ssh выполнить команду:

nginx -s reload

Теперь точно всё ОК.

Но помните, все правки вы выполняете на свой страх и риск. Конфигурация конкретно вашего сервера может существенно отличаться и любые правки файлов конфигурации могут привести к неполадкам. Всегда делайте резервную копию.