Как сделать 301-Redirect в Nginx с index.php на корень сайта(/)?

Добрый день! Переношу сайт с виртуального хостинга на VDS. Вся проблема в том, что на хостинге работал Apache+php-cgi, а VDS настраиваю на Nginx+php-fpm. Соответственно все правила в .htaccess игнорируются.

На данный момент визуально удалось решить большинство проблем с mod_rewrite, но осталась одна существенная проблема: необходимо реализовать 301-Redirect с site.ru/index.php и site.ru/index.html на site.ru/.

С index.html удалось решить внесением директивы:

location /index.html {
    rewrite ^(.*)$ http://site.ru/ permanent;
    }


Если сделать подобное с index.php, то получается циклическая переадресация.

Попробовал несколько вариантов из интернета. В частности:

if ($request_uri ~* "^(.*/)index\.php") {
        return 301 $1;
	}


Указанный выше способ работает, но некоторые скрипты на сайте работают неправильно, в частности поиск.

Есть ли ещё варианты конфигурации для реализации правильного редиректа?

P.S. на сайте с Apache, для реализации механизма переадресации были следующие директивы и все скрипты на сайте работали исправно:

##Redirect from index.php to root

RewriteCond %{THE_REQUEST} !^POST
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteCond %{SERVER_PORT}>s ^(443>(s)|[0-9]+>s)$
RewriteRule ^index\.php$ http%2://site.ru/ [R=301,L]

##END Redirect from index.php to root

##Redirect from index.html to root

RewriteCond %{THE_REQUEST} !^POST
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteCond %{SERVER_PORT}>s ^(443>(s)|[0-9]+>s)$
RewriteRule ^index\.php$ http%2://site.ru/ [R=301,L]

##END Redirect from index.html to root
  • Вопрос задан
  • 8838 просмотров
Пригласить эксперта
Ответы на вопрос 2
sashkets
@sashkets
Прекратил отвечать после 24.02.2022
локейшены с индекс файлами удали и написать

index index.php index.html;
Ответ написан
@VladimirBryzgalov Автор вопроса
server {
    listen *:80 default_server;
    server_name localhost;
    root /var/www/web/sites/$host;
    index index.html index.htm index.php;

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

    location ~ .php$ {
##      try_files      $uri =404;
        fastcgi_pass   127.0.0.1:9001;
        fastcgi_index  index.php;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_ignore_client_abort off;
    }
}

    include phpmyadmin.conf;

    location /catalog.html {
    rewrite ^(.*)$ http://site.ru/ permanent;
    }

    location /index.html {
    rewrite ^(.*)$ http://site.ru/ permanent;
    }


    location ~ /\.ht {
        deny all;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы