DANFA

Nginx: Добавление слеша в конце URL, если его там нет

Ранее страницы моего сайта открывались, как с слэшем в конце URL, так и без него. Чтобы не допустить дублей страниц, я решил, что мой сайт будет работать только с слэшем в конце URL. Проверку слэша и его добавления делал на PHP:
		// Добавление слеша в конце URL, если его там нет
		if (substr($url, -1) != '/')
		{
			if (!preg_match('/(.*)\.(jpg|jpeg|gif|png|js|css|ico)/i', $url))
			{
				$url = $url . '/';
			}
		} // End: Добавление слеша в конце URL, если его там нет

Слэш добавляется ко всем URL, кроме тех, что имеют на конце: jpg|jpeg|gif|png|js|css|ico.

Всё работает отлично, но грешно делать это на PHP, если есть Nginx... Поискав в интернете решение моей задачи, нашёл такую строку кода:
rewrite ^([^.\?]*[^/])$ $1/ permanent;

Данный код добавляет слэш в конец всем URL, кроме тех, где есть точка (.) или параметры (id=1). А значит картинки, к которым будут обращаться на прямую, остаются без слэша.

Вставил строку в location:
	location / {
		rewrite ^([^.\?]*[^/])$ $1/ permanent; # Добавление слеша в конце URL, если его там нет
		try_files $uri /index.php?do=$uri;
		location ~ [^/]\.ph(p\d*|tml)$ {
			try_files /does_not_exists @php;
		}
	}

После чего перечитал конфигурацию, при помощи команды:
nginx -s reload

PHP код удаляю. Теперь работает Nginx.

Возможно, будет интересно:
- Блог: Nginx: Удаление лишних слэшев в URL
- Блог: Nginx: Удаление параметров в URL
Автор:  29.05.2024 10:04:39 pm