@Ext7

Nginx — как избавиться от ERR_TOO_MANY_REDIRECTS?

Больше часа бьюсь над вопросом, перепробовал кучу всего, но всё равно не решил такую проблему с конфигом nginx.
Есть rewrite правило, отображающее файлы в браузере без расширения. Оно нормально работает.

Также есть правило для одной специальной страницы, на которой отображение аргумента тоже рерайтится из /page.php?param=arg в вид /page/arg И, видимо, оно и создает проблему: ошибка 404 вместо того, чтобы показывать заданную страницу, превращается в циклический редирект 301.

Как восстановить нормальную работу error_page 404, оставив и правило для специальной страницы? Есть решение?

Вот сам конфиг:

server {
	listen 443 ssl http2;
	server_name example.com www.example.com;
	root /var/www/example.com/www;

	index index.php$is_args$args index.html index.htm;

	ssl_certificate /etc/nginx/ssl/self.crt;
	ssl_certificate_key /etc/nginx/ssl/self.key;

	location ~\.(php|html)$ {
		include fastcgi.conf;
		fastcgi_pass unix:/run/php/php7.2-fpm.sock;

		try_files $uri $uri.php $uri/ @extensionless-php;
	}

	location / {
		try_files $uri $uri/ @extensionless-php;
		index index.php index.html index.htm;
	}

	location @extensionless-php {
		rewrite ^/(.*/)?index.(php|html|py)$ /$1 permanent;
		rewrite ^/(.*)\.(php|html|py) /$1 permanent;

		rewrite ^/(.*)/$ $1 permanent;		
		rewrite ^(.*)$ $1.php?$args;
	}

	location /page {
		rewrite ^/page/([^/]*)$ /page?param=$1;
	}

	error_page 404 /error;
	error_page 403 =404 /error;
}
  • Вопрос задан
  • 2218 просмотров
Решения вопроса 1
@dodo512
rewrite ^/(?:(.*)/|)index\.(?:php|htm) /$1 permanent;
rewrite ^/(.*)\.(php|htm) /$1 permanent;
rewrite ^/(.*)/$ /$1 permanent;

rewrite ^/page/([^/]*)$ /page.php?param=$1;
rewrite ^/$ /index.php;

location ~ \.php$ {
    include fastcgi.conf;
    fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}

location / {
    try_files $uri @extensionless-php;
}

location @extensionless-php {
    try_files $uri.php $uri/index.php =404;

    include fastcgi.conf;
    fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}

error_page 404 /error;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы