Nginx Rewrite / product_category / Wordpress

1

Estou tentando reescrever os seguintes itens para um site WordPress / Woocommerce:

/product_category/example-category/
/product/example-product/

para ...

/example-category/
/example-product/

usando as seguintes regras:

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;

 }

... e aqui estão as regras do wordpress.conf incluídas em um arquivo separado:

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;  

}

mas o Nginx parece estar ignorando as regras de reescrita que eu especifico para o produto cat / product reescreve como se elas não existissem. Por exemplo, se eu visitar:

http://www.example.com/product-category/footwear/

em vez de reescrever para:

http://www.example.com/footwear/

apenas serve:

http://www.example.com/product-category/footwear/

O que estou fazendo de errado? Obrigado!

    
por d1ch0t0my 20.09.2016 / 05:38

1 resposta

0

Suas reescritas estão usando expressões regulares e, curiosamente, estão configuradas para corresponder apenas a URLs específicos.

rewrite ^/product-category/1$ /;
rewrite ^/product/1$ /;

Assim, somente as URLs /product-category/1 e /product/1 corresponderiam a essas diretivas. Nem /product/2 nem /product/air-jordan-1-retro-high-og-banned-2016-release corresponderão.

O que eu acho que você quer fazer é capturar o restante do URL e usá-lo no URL de destino.

rewrite ^/product-category/(.*) /$1;
rewrite ^/product/(.*) /$1;

Mas espere, tem mais! Você não especificou um sinalizador opcional para a diretiva rewrite . Então, depois de reescrever a URL, o nginx continua em seu caminho através da configuração. Ele não inicia o processamento do pedido ou redireciona o agente do usuário. Isso pode fazer com que o WordPress fique confuso. Se você quiser redirecionar (por exemplo, para SEO), adicione o sinalizador apropriado.

rewrite ^/product-category/(.*) /$1 permanent;
rewrite ^/product/(.*) /$1 permanent;
    
por 20.09.2016 / 07:41

Tags