Converter o htaccess para as regras de reescrita do Nginx

2

Eu preciso converter um redirecionamento .htaccess para Nginx conf.

Aqui está o .htaccess

Redirect 301 /wp-content/plugins/zendesk-for-woocommerce/api/redirect-test1.html /wp-content/plugins/zendesk-for-woocommerce/api/redirect-test2.html

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ %{ENV:BASE}index.php [QSA,L]
DirectoryIndex index.html index.htm index.php index.shtml

Aqui está a seção relevante da minha configuração do Nginx

location / {
   root   /var/www/vhosts/sitename/httpdocs;
   index  index.php index.html index.htm;
   try_files $uri $uri/ /index.php?$args;
}

De acordo com o guia que encontrei online, mudei para:

location / {
    root   /var/www/vhosts/sitename/httpdocs;
    index  index.php index.html index.htm;
    try_files $uri $uri/ /index.php?$args;
    if (!-e $request_filename){
       rewrite ^(.*)$ /$env_base index.php break;
}
}

Eu recebo o erro:

nginx: [emerg] invalid number of arguments in "rewrite" directive in /etc/nginx/conf.d/sitename.conf:19

nginx: configuration file /etc/nginx/nginx.conf test failed
    
por hemlock 05.10.2017 / 00:05

2 respostas

0

Tente isto:

location / {
    root /var/www/vhosts/sitename/httpdocs;
    index index.php index.html index.htm;
    if (!-e $request_filename){
       rewrite ^/(.*)$ /index.php;
    }
}

break não é apenas redundante, mas também errado, porque se fizer o nginx encerrar o processo de reescrita e colocar a solicitação dentro da localização atual (que não está ciente do manuseio do script php).

try_files é uma abordagem comum quando um engenheiro não sabe onde exatamente seus arquivos estão localizados, ele é traduzido para nginx em 'veja aqui, olhe lá, procure em todos os lugares e nos ajude deus a encontrar esses arquivos estamos procurando por '. Eu pessoalmente uso try_files somente em situações em que um grande conjunto de arquivos é realocado entre duas partes da árvore e arquivos realmente podem estar em vários locais, e isso não é conhecido decentemente.

Note que você também precisa de um local de regexp para arquivos * .php, passando-os para o backend fastcgi ou qualquer outro. Isso está além do escopo da sua pergunta e desta resposta; Espero que você saiba o que quero dizer.

    
por 05.10.2017 / 09:27
0

Tente algo como:

location /wp-content/plugins/zendesk-for-woocommerce/api {
  if (!-e $request_filename){
  rewrite ^(.*)$ /wp-content/plugins/zendesk-for-woocommerce/api/index.php;
 }
}

Supondo que você tenha um local / bloco principal de trabalho que processará as solicitações * .php, como o drookie mencionou, este bloco pode entrar. Você pode ter os try_files definidos dentro desse bloco principal já.

O $ env_base dentro da reescrita não funcionará, pois não é uma variável NGINX. Parece que a conversão sugerida para o NGINX foi feita através do link ou similar que não considera as variáveis do Apache como% {ENV: BASE} no .htaccess. Acabar com esta peça foi o mais difícil na minha solução de problemas.

Além disso, você não vai querer interromper essa reescrita, pois o NGINX interromperá o processamento.

Obviamente, cada configuração é um pouco diferente. Depois de lutar para fazer com que isso funcionasse, percebi que a conversão indevida leva a vários caminhos para solucionar problemas e pensar% {ENV: BASE} poderia ser uma queda na qual me levaria na direção errada. Além disso, reavaliando uma vez que eu superei esse obstáculo, eu queria escopo para o caminho especificamente ao invés de mantê-lo aberto.

Espero que isso ajude.

    
por 14.10.2017 / 00:14