Я пытаюсь переписать следующее для сайта WordPress / Woocommerce:
/product_category/example-category/
/product/example-product/
на ...
/example-category/
/example-product/
, используя следующие правила:
server {
listen 10.99.0.3:8080;
server_name www.example.com;
root /home/www.example.com/public_html;
index index.html index.htm index.php;
rewrite ^/product-category/1$ /;
rewrite ^/product/1$ /;
include conf.d/whitelisted.conf;
include conf.d/wp/restrictions.conf;
include conf.d/wp/wordpress.conf;
}
... и вот правила wordpress.conf, включенные из отдельного файла:
location / {
try_files $uri $uri/ /index.php?$args;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
access_log off; log_not_found off; expires max;
}
location ~* /(?:uploads|files)/.*\.php$ {
deny all;
}
location ~* /wp-content/.*\.php$ {
deny all;
}
location ~* /wp-includes/.*\.php$ {
deny all;
}
location ~* /(?:uploads|files|wp-content|wp-includes)/.*\.php$ {
deny all;
}
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
include fastcgi_params;
fastcgi_pass unix:/var/run/php-fpm/php5-fpm.sock;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 16k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_read_timeout 1800;
}
но Nginx, похоже, игнорирует правила перезаписи, которые я указываю для перезаписи продукта cat / product, как будто их не существует. Например, если я посещаю:
http://www.example.com/product-category/footwear/
вместо того, чтобы переписывать на:
http://www.example.com/footwear/
, он просто обслуживает:
http://www.example.com/product-category/footwear/
Что я делаю не так? Спасибо!
Ваши переписывания используют регулярные выражения, и, что интересно, они установлены на соответствие только определенным URL.
rewrite ^/product-category/1$ /;
rewrite ^/product/1$ /;
Таким образом, только URL /категория продуктов/1
и /продукт/1
будут соответствовать этим директивам. Ни /product/2
, ни /product/air-jordan-1-retro-high-og-banned-2016-release
не будут совпадать.
Я думаю, что вместо этого вы хотите перехватить оставшийся URL и использовать его в URL назначения.
rewrite ^/product-category/(.*) /$1;
rewrite ^/product/(.*) /$1;
Но подождите, это еще не все! Вы не указали необязательный флаг для директивы rewrite
. Итак, после перезаписи URL, nginx продолжает свой путь через конфигурацию. Он не начинает заново обрабатывать запрос и не перенаправляет пользовательского агента. Это может сбить с толку WordPress. Если вы хотите переадресацию (например, для SEO), то вам следует добавить соответствующий флаг.
rewrite ^/product-category/(.*) /$1 permanent;
rewrite ^/product/(.*) /$1 permanent;