Suponho que o principal problema aqui não seja converter as regras, mas entender onde você deve usá-las. Por diretório .htaccess o contexto é o recurso específico do Apache HTTPD e o Nginx doesn ' t suportar esse tipo de comportamento.
O equivalente Nginx é a diretiva location em seu nginx.conf , por exemplo
http {
. . .
server {
. . .
location /country/ {
rewrite ^/country/(.+)/$ /country/index.php?country=$1 break;
rewrite ^/country/(.+)/page/(.+)/$ /country/index.php?country=$1&page=$2 break;
}
location /genre/ {
rewrite ^/genre/(.+)/$ /genre/index.php?genre=$1 break;
rewrite ^/genre/(.+)/page/(.+)/$ /genre/index.php?genre=$1&page=$2 break;
}
}
}
Aqui, você pode usar as regras rewrite de qualquer ferramenta de conversão que encontrou, mas também pode aprender como convertê-los por si mesmo, já que a sintaxe é extremamente semelhante:
- Diretiva
RewriteRuledo Apache:RewriteRule Pattern Substitution [flags] -
rewriteda diretiva do Nginx:rewrite regex replacement [flag];
- No Nginx, você precisa incluir o
/inicial no início (também^/,/country/etc.). -
Substitutos também são relativos à raiz, então você deve incluir os
/country/etc. principais. - Você precisa de
;no final de cada linha de regra.
As flags têm esses equivalentes:
-
[L]- >lastdentro deserver {}ebreakdentro delocation {}.Esta parte é realmente crucial, pois a maioria dos conversores não consegue entender a diferença contextual!
But if these directives are put inside a
location, thelastflag should be replaced bybreak, or otherwise nginx will make 10 cycles and return the 500 error. -
[R=302]- >redirect -
[R=301]- > %código%
As reescritas do condições do Apache, como permanent , podem ser substituídas em Nginx por RewriteCond %{HTTP_HOST} ^example.com diretivas : if , por exemplo
location / {
if ($http_host ~ "^example.com"){
rewrite ^(.*)$ http://www.example.com/$1 redirect;
}
rewrite ^/(.+)-live-streaming/$ /tv.php?tv=$1 break;
}
O resto você pode aprender lendo os manuais vinculados e usando a ferramenta de conversão para fins educacionais. (Anteriormente, eu estava vinculado à ferramenta de conversão apache2nginx que não conseguia lidar com a relatividade da raiz e usava if ($http_host ~ "^example.com") { } em vez de break . O htaccess para o conversor nginx funciona melhor.