Добавить расширение .php для статей WordPress под управлением Webinoly

Добавить расширение .php для статей WordPress под управлением Webinoly

Собственно понадобилось мне добавить расширение .php для статей WordPress под управлением Webinoly, сделать это, как выяснилось, достаточно просто.

Итак напомню, Webinoly у меня стоит в конфигурации NGINX+PHP-FPM и как выяснилось, NGINX считает что расширение .php у статей — это прям вообще ненужное дело, и даже вредное, и всячески сопротивляется, но…

Действие первое. Админка

Итак для начала убедимся, что просто так ничего не работает — для этого идем в админке WordPress в [highlight] Настройки[/highlight] > [highlight] Постоянные ссылки[/highlight] и вводим в поле [highlight] Произвольно[/highlight]  значение [highlight] /%postname%.php[/highlight], сохраняем, и… На сайте ничего не работает — все статьи ведут на 404.

Добавить расширение .php для статей WordPress под управлением Webinoly 01

Ну  что же, ставим плагин [highlight] .PHP on PAGES[/highlight] (не обязательно его, выбор тут достаточно большой — гугл в помощь).

Добавить расширение .php для статей WordPress под управлением Webinoly 02

И все также ничего не работает. Но мы этого ожидали и лезем ковырять конфиг (предупреждаю, возможно есть более изящные решения, буду рад если вы предложите своё).

Действие второе. Конфиги

Для этого лезем на сервер (я использую WinSCP) в папку [highlight] /etc/nginx/sites-available[/highlight]  и редактируем конфиг нужного сайта.  Комментируем строку include common/wpfc.conf; поставив перед ней #.

# include common/wpfc.conf;
include common/wpcommon.conf;
include common/locations.conf;
include common/headers-http.conf;
include common/headers-html.conf;

А затем вставляем содержимое файла wpfc.conf; перед этим блоком (после строки index index.php index.html index.htm;). 

# WPFC NGINX CONFIGURATION
# DO NOT MODIFY, ALL CHANGES LOST AFTER UPDATE Webinoly

set $skip_cache 0;
# POST requests and URL with a query string should always go to php
if ($request_method = POST) {
	set $skip_cache 1;
}
if ($query_string != "") {
	set $skip_cache 1;
}

# Don't cache URL containing the following segments
if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|wp-.*.php|index.php|/feed/|.*sitemap.*\.xml)") {
	set $skip_cache 1;
}

# Don't use the cache for logged in users or recent commenter or customer with items in cart
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in|[a-z0-9]+_items_in_cart|[a-z0-9]+_cart_hash") {
	set $skip_cache 1;
}

# Use cached or actual file if they exists, Otherwise pass request to WordPress
location / {
	try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
	try_files $uri =404;
	include fastcgi_params;
	fastcgi_pass php;
	fastcgi_cache_bypass $skip_cache;
	fastcgi_no_cache $skip_cache;
	fastcgi_cache WORDPRESS;
}

И заменяем в нем выделенную строку try_files $uri =404; на try_files $uri /index.php?$args; получаем в итоге:

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

	server_name yoursite.ru www.yoursite.ru;

	access_log /var/log/nginx/yoursite.ru.access.log we_log; 
	error_log /var/log/nginx/yoursite.ru.error.log;

	root /var/www/yoursite.ru/htdocs;
		
	index  index.php index.html index.htm;

# WPFC NGINX CONFIGURATION
# DO NOT MODIFY, ALL CHANGES LOST AFTER UPDATE Webinoly

set $skip_cache 0;
# POST requests and URL with a query string should always go to php
if ($request_method = POST) {
	set $skip_cache 1;
}
if ($query_string != "") {
	set $skip_cache 1;
}

# Don't cache URL containing the following segments
if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|wp-.*.php|index.php|/feed/|.*sitemap.*\.xml)") {
	set $skip_cache 1;
}

# Don't use the cache for logged in users or recent commenter or customer with items in cart
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in|[a-z0-9]+_items_in_cart|[a-z0-9]+_cart_hash") {
	set $skip_cache 1;
}

# Use cached or actual file if they exists, Otherwise pass request to WordPress
location / {
	try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
	try_files $uri /index.php?$args;
	include fastcgi_params;
	fastcgi_pass php;
	fastcgi_cache_bypass $skip_cache;
	fastcgi_no_cache $skip_cache;
	fastcgi_cache WORDPRESS;
}

	# include common/wpfc.conf;
	include common/wpcommon.conf;
	include common/locations.conf;
	include common/headers-http.conf;
	include common/headers-html.conf;
	include /var/www/yoursite.ru/*-nginx.conf;
}
# WebinolyNginxServerEnd

Естественно необходимо поменять [highlight] yoursite.ru[/highlight] на имя вашего сайта.

Проверяем правильность конфига и перезагружаем NGINX введя в консоли:

user@server:~# sudo nginx -t
user@server:~# sudo service nginx restart

Итак проверяем что расширение .php для статей теперь добавляется и работает нормально. В результате этих манипуляций мы получим работающий сайт все материалы которого будут иметь адрес вида [highlight] yoursite.ru/my-cool-post.php[/highlight] 

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to Top