@SFY

Как правильно сделать location/rewrite?

server {
	listen 80;
	listen [::]:80;

	server_name site.ru;

	root /var/www/site.ru;
	index index.html;
	location ~* \.(?:jpg|jpeg|gif|png|webp)$ {
        expires 30d;
    }
    location ~* \.(css|js|woff2)$ {
    	expires 30d;
    }
    location / {
		try_files $uri $uri/ =404;
	}
    rewrite ^/([a-z,0-9,-]+)$ /pages/$1.html last;
	gzip                on;
    gzip_min_length     1000;
    gzip_proxied        expired no-cache no-store private auth;
    gzip_types          text/plain text/css text/javascript application/javascript application/x-javascript text/xml application/xml application/xml+rss application/json;
    gzip_disable        "msie6";
}


Имеется вот такой конфиг.
В папке /var/www/site.ru лежат картинки, шрифты, скрипты.
Есть еще папка /var/www/site.ru/pages там лежат уже сгенерированные страницы.
Страницы имеют вид: path.html

Как сейчас работает.
Когда пользователь переходит по site.ru/page111 то ему отдается файл /var/www/site.ru/pages/page111.html

Но есть проблема, а именно часть страницы сгенерированы постранично.
Пример: site.ru/bigpage?p={НОМЕР_СТРАНИЦЫ}
Как поправить конфиг чтобы отдавался файл /var/www/site.ru/pages/bigpage-{НОМЕР_СТРАНИЦЫ}.html
И когда не указан параметр ?={НОМЕР_СТРАНИЦЫ} отдавался просто /var/www/site.ru/pages/bigpage-1.html

Можно было бы прописать это все ручками, но страницы постоянно создаются и нужно автоматически решить задачу.
Подскажите пожалуйста решить данную задачку.
  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
@dodo512
Если там нет особых отличий в именах обычных и тех что разбиты на несколько страниц.
Тогда остаётся последовательно проверять существование файлов.
location / {
    try_files $uri $uri/ =404;
}
rewrite ^/([a-z,0-9,-]+)$ /pages/$1.html last;

Этот фрагмент поменять на такой:
location / {
    try_files $uri $uri/ /pages$uri-$arg_p.html /pages$uri-1.html /pages$uri.html =404;
}


Можно закрыть адреса вроде site.ru/pages/page.html и c несуществующим номером страниц site.ru/bigpage?p=999
rewrite ^/([a-z0-9-]+)$ /pages/$1-$arg_p.html last;

location ~ ^(/pages/.+)-\.html$ {
    internal;
    try_files $1-1.html $1.html =404;
}

location ~ ^/pages/.+\.html$ {
    internal;
    try_files $uri =404;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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