Перейти к содержанию

mod_rewrite под Nginx + PHP-FPM


Рекомендуемые сообщения

Всех приветствую!

Перешел с Apache на FastCGI (Nginx + PHP-FPM)
Настроил ssl в конфиге nginx, подключил http2 и отключил в админцентре mod_rewrite.
В итоге, сайт получил ощутимый прирост скорости загрузки страниц.
Но появилась проблема проблема с ссылками.
Так как .htaccess теперь не задействован, то mod_rewrite не работает.
Ссылки с поисковых систем теперь ведут прямиком в ошибку 404 nginx.
Как сделать rewrite под ngnix? 

ips 4.2.6

ngnix v 1.12.2

php 7.1.12

Сам конфиг

server {
	server_name mydomen.ru ;
	charset UTF-8;
	index index.html index.php;
	disable_symlinks if_not_owner from=$root_path;
	include /etc/nginx/vhosts-includes/*.conf;
	include /etc/nginx/vhosts-resources/mydomen.ru/*.conf;
	access_log /var/www/httpd-logs/mydomen.ru.access.log;
	error_log /var/www/httpd-logs/mydomen.ru.error.log notice;
	ssi on;
	set $root_path /var/www/koskad/data/www/mydomen.ru;
	root $root_path;
	listen 80;
	location / {
		location ~ [^/]\.ph(p\d*|tml)$ {
			try_files /does_not_exists @php;
		}
	}
	return 301 https://$host:443$request_uri;
	gzip on;
	gzip_comp_level 5;
	gzip_disable "msie6";
	gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
	location @php {
		fastcgi_index index.php;
		fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f [email protected]";
		fastcgi_pass unix:/var/www/php-fpm/admin.sock;
		fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
		try_files $uri =404;
		include fastcgi_params;
	}
}
server {
	server_name mydomen.ru ;
	ssl on;
	ssl_certificate "/var/www/httpd-cert/admin/mydomen.ru.crtca";
	ssl_certificate_key "/var/www/httpd-cert/admin/mydomen.ru.key";
	ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:!NULL:!RC4;
	ssl_prefer_server_ciphers on;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
	add_header Strict-Transport-Security "max-age=31536000;";
	ssl_dhparam /etc/ssl/certs/dhparam4096.pem;
	charset UTF-8;
	index index.html index.php;
	disable_symlinks if_not_owner from=$root_path;
	include /etc/nginx/vhosts-includes/*.conf;
	include /etc/nginx/vhosts-resources/mydomen.ru/*.conf;
	access_log /var/www/httpd-logs/mydomen.ru.access.log;
	error_log /var/www/httpd-logs/mydomen.ru.error.log notice;
	ssi on;
	set $root_path /var/www/admin/data/www/mydomen.ru;
	root $root_path;
	listen 443 ssl http2;
	gzip on;
	gzip_comp_level 5;
	gzip_disable "msie6";
	gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
	location / {
		location ~ [^/]\.ph(p\d*|tml)$ {
			try_files /does_not_exists @php;
		}
	}
	location @php {
		fastcgi_index index.php;
		fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f [email protected]";
		fastcgi_pass unix:/var/www/php-fpm/admin.sock;
		fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
		try_files $uri =404;
		include fastcgi_params;
	}
}

 

Ссылка на комментарий
Поделиться на другие сайты

Посмотрите это, должно помочь.

 

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, KosKad сказал:

mod_rewrite не работает.

Можно попробовать конвертер для nginx http://winginx.com/ru/htaccess

Ссылка на комментарий
Поделиться на другие сайты

Пробовал конвертировать,  не помогло.

Пробовал методом из предоставленной темы выше.

Выходит что, при клике на любую ссылку на сайте, появляется окошко на скачивание index.php.

То что я получаю после конвертации

# nginx configuration

location / {
  if (!-e $request_filename){
    rewrite \.(js|css|jpeg|jpg|gif|png|ico|map)(\?|$) /404error.php break;
  }
  if (!-e $request_filename){
    rewrite ^(.*)$ /index.php break;
  }
}

Тоже не работает

Мне нужно убрать из ссылок только /index.php?, но каким образом, понять затрудняюсь.

Ссылка на комментарий
Поделиться на другие сайты

Проблему решил.

Заменил 

location / {
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @php;
        }
    }

на

location / {
            try_files $uri $uri/ /index.php; 
        location ~ [^/]\.ph(p\d*|tml)$ {
            try_files /does_not_exists @php;
        }
    }

И обратно включил mod_rewrite.  

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...