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

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

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

Если предоставленной информации вам не достаточно, прочитайте полное руководство по настройке 301 редиректа как на nGinx так и на Apache, с PHP и без PHP.

Обратите внимание, что 301 редирект, это не особенность веб-сервера, а код ответа, который получает браузер от сервера. Поэтому способ отправки 301 редиректа может быть различным, но для осуществления редиректа нужен код 301, который является стандартным кодом.

На последок, давайте разберем какие бывают код ответом с переадресацией:
301 – Moved permanently, постоянное перенаправление, грубо говоря, страница больше не доступна по старому адресу и следует её искать по новому адресу. Этот ответ помогает перенастраивать проиндексированные страницы в поисковой выдаче.
302 – Moved temporarily, временное перенаправление, сопоставим с 301, но обозначает, что страница временно не доступна по старому адресу, и в скором времени станет снова доступна.