Ajuda com o apache para nginx reescrever regras

1

Preciso de ajuda para converter algumas regras do .htaccess do Apache para as do nginx. Espero que alguém mais experiente possa me ajudar. Aqui estão minhas regras:

1

    RewriteEngine on

RewriteCond %{HTTP_HOST} ^www.url.ba [NC]
RewriteRule ^(.*)$ http://url.ba/$1 [R=301,L]

RewriteRule ^api\.php /index.php?c=api&m=index&%{QUERY_STRING} [L]

RewriteRule ^contact\.php /index.php?c=contact&m=index&%{QUERY_STRING} [L]

RewriteRule ^([a-zA-Z0-9]{4,25})$ /index.php?c=api&m=check&hash=$1 [L]

RewriteCond $1 !^(index\.php|images|css|script|ZeroClipboard\.swf)
RewriteRule ^(.*)$ /index.php/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+) / [R=301,L]

2

    RewriteEngine on


RewriteCond %{HTTP_HOST} ^www.img.ba.ba$ [NC]
RewriteRule ^(.*)$ http://img.ba/$1 [R=301,L]


RewriteCond $1 !(\/protected)$
RewriteRule ^(.*)\/protected$ /protected.php?hash=$1 [L]


RewriteCond $1 !(thumb\.php)$
RewriteRule ^(.*)\/thumb$ /thumb.php?hash=$1 [L]


RewriteCond $1 !^(index\.php|thumb\.php|upload\.php|contact\.php|protected\.php|api\.php|password\.php|favicon\.ico|images|css|script)
RewriteRule ^(.*)$ /index.php?hash=$1 [L]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+) / [R=301,L]
    
por amarc 19.04.2011 / 16:33

2 respostas

2

Desde que você tenha as regras prontas, é fácil. Aqui estão as diretrizes

  • Leia a reescrita docs
  • Leia as principais variáveis ( %{HTTP_HOST} se torna $host , por exemplo)
  • RewriteCond será transformado em if blocos
  • RewriteRules são praticamente os mesmos, exceto as diferenças de variáveis e o uso de expressões regulares. Além disso, os sinalizadores são gravados na íntegra como break , permanent e assim por diante.

Existem muitos exemplos na página de reescrita.

    
por 19.04.2011 / 16:49
0

A maioria das condições de reescrita do apache deve não ser transformada em blocos. Aquelas condições que correspondem a HTTP_HOST devem ser transformadas em blocos de servidores, aqueles que correspondem ao nome de arquivo uri ou request devem ser substituídos por blocos de localização, e os testes de existência de arquivos devem ser substituídos por try_files. Por favor, não use se os blocos não forem necessários. Supondo que todas as solicitações dinâmicas devam passar por php, acho que a tradução correta dessas regras é:

server {
  server_name www.url.ba;
  rewrite ^ http://url.ba$request_uri? permanent;
}

server {
  server_name url.ba;

  root /path/to/root;

  location = /api.php { rewrite ^ /index.php?c=api&m=index; }
  location = /contact.php { rewrite ^ /index.php?c=contact&m=index; }

  location ~ "/([a-zA-Z0-9]{4,25})$" /index.php?c=api&m=check&hash=$1?; }

  location /index.php {
    fastcgi_split_path_info (/index.php)(.*);
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
    fastcgi_pass your_backend;
  }

  location /images { try_files $uri @home; }
  location /css { try_files $uri @home; }
  location /script { try_files $uri @home; }
  location /ZeroClipboard.swf { try_files $uri @home; }
  location @home { rewrite ^ / permanent; }

  location / {
    rewrite ^ /index.php$uri;
  }
}

server {
  # Did you really mean .ba.ba?
  server_name www.img.ba.ba;
  rewrite ^ http://img.ba$request_uri? permanent;
}

server {
  server_name img.ba;

  # I'm not positive that these translations are correct,
  # I'm guessing that the repeated $1 is always the requested
  # uri in the apache rules

  # The (?<variable> capture syntax is 0.8.25+.  If you're
  # running an older version, the easiest way will be to
  # repeat the location regex in the rewrite and capture $1

  location ~ ^/(?<hash>.*)/protected$ {
    rewrite ^ /protected.php?hash=$hash;
  }

  location ~ ^/(?<hash>.*)/thumb\.php$ {
    rewrite ^ /thumb.php?hash=$hash;
  }

  location ~ ~/(index|thumb|upload|contact|protected|api|password)\.php$ {
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $request_filename;
    fastcgi_pass your_backend;
  }

  location /images { try_files $uri @home; }
  location /css { try_files $uri @home; }
  location /script { try_files $uri @home; }
  location @home { rewrite ^ / permanent; }

  location / { rewrite ^/(.*) /index.php?hash=$1; }
}
    
por 20.04.2011 / 03:49