LINUX.ORG.RU
ФорумAdmin

NGINX+PHP5-FPM как убрать расширения .html и .php?

 ,


0

2

Здравствуйте! Подскажите, как убрать из адресной строки расширения файлов .html и .php? В секцию server{} добавил настройки:

location / {
	location ~ ^/index.html$ {
		if ($request_uri ~ ^/index.html) {
			rewrite ^.*$ / permanent;
			}
	}
	rewrite ^(/.*)\.php(\?.*)?$ $1$2 permanent;
	rewrite ^(/.*)\.html(\?.*)?$ $1$2 permanent;
	rewrite ^/(.*)/$ $1 permanent;
	try_files $uri.php $uri.html $uri/ $uri =404;
	location ~ \.php$ {
		include fastcgi_params;
		fastcgi_pass  unix:/var/run/php5-fpm.sock;
		fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
	}
}

В итоге убраны расширения .html файлов, работает редирект с главной страницы на корень сайта, а вот расширение .php никуда не исчезает. Что у меня неправильно?

А как вы собираетесь выполнять php-код, если вы пытаетесь редиректить php url-ки (301-м кодом) на url-ки без расширения .php? А потом используете «location ~ \.php$ ...».
Чего-то у вас с логикой не того...

Конфигурация, которую вы привели - это вообще бред какой-то, в том числе и с точки зрения SEO. Вы бы объяснили, какая у вас реально структура url-к сайта и используете ли вы какой-нибудь PHP-фреймворк. Тогда будут шансы получить какой-то конструктивный совет.

vinvlad ()

Посмотри форум или документацию своего фреймворка или CMS, там обычно есть дефолтный конфиг для nginx с необходимыми нюансами.

У тебя не понятно как это должно работать, через роутинг и одну точку входа или через 100500 файлов разных.

BaBL ★★★★★ ()

... извиняюсь, не заметил try_files $uri.php.
Вынесите rewrite-правила наружу - в server-блок. Просто для php url-к у вас сразу цепляется внутренний location-блок и rewrite-правила в корневом location игнорируются.

vinvlad ()

... только тут есть такой момент: после редиректа сработает try-директива, которая просто вернет текст php-скрипта. Это явно не то, что тебе нужно )

Так что, c php нужно выкручиваться как-то по другому.

vinvlad ()
Ответ на: комментарий от vinvlad

Заработало!

Заработало, спасибо Доброму Человеку!

rewrite ^/(.*/)?index.(html|php)$ /$1 permanent;
rewrite ^/(.*)\.(php|html)$ /$1 permanent;
try_files $uri $uri.html $uri/index.html @php;
location @php {
	set $fname $document_root$document_uri;
	if ($fname ~ /$) {
	set $fname "${fname}index";
}
if (!-f $fname.php) {
	return 404;
	}
	include fastcgi.conf;
	fastcgi_param SCRIPT_FILENAME $fname.php;
	fastcgi_pass unix:/var/run/php5-fpm.sock;
}
У моей книжки по nginx такие подробности не расписаны :) Одна из моих ошибок - рядом с .php файлом лежал его .html прототип без скрипта и обрабатывался в первую очередь .html Всем спасибо за советы!

Servis-engineer ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.