Um. Correspondência de expressão regular, onde: * ~ é a correspondência sensível a maiúsculas minúsculas * ~* é uma correspondência insensível ao caso * !~ e !~* são incompatibilidades sensíveis a maiúsculas minúsculas e maiúsculas, respectivamente Dois. Correspondência de arquivos e diretórios, onde: * -f e !-f são usados para determinar se um arquivo existe * -d e !-d são usados para determinar se existe um diretório * -e e !-e são usados para determinar se existe um arquivo ou diretório * -x e !-x são usados para determinar se um arquivo é executável ou não 3. O último parâmetro da instrução de reescrita é a marca de flag, que é marcada com: 1.last é equivalente à marca [L] em Apache, que significa reescrita. 2. Quebra Após a conclusão do emparelhamento dessa regra, o emparelhamento será encerrado e as regras subsequentes não serão mais combinadas. 3.redirect retorna o 302 redirecionamento temporário, e o endereço do navegador exibirá o endereço URL após o salto. 4.Permanent return 301 permanent redirection, o endereço do navegador exibirá o endereço URL após o salto.
Use last and break para implementar reescritas de URI, e a barra de endereços do navegador permanece inalterada. E há uma pequena diferença entre os dois, usar o comando alias deve ser marcado com último; Ao usar proxy_pass diretivas, você precisa usar a tag de quebra. Depois que a última tag for executada nessa regra de reescrita, ela estará no servidor{......} A tag reinicia o pedido, enquanto a tag break termina a partida após a conclusão da partida por regência. Por exemplo: se redirecionarmos uma URL como /photo/123456 para /path/to/photo/12/1234/123456.png reescrever "/foto/([0-9]{2})([0-9]{2})([0-9]{2})"/caminho/para/foto/$1/$1$2/$1$2$3.png ;
Quatro. Regra NginxRewrite
1. comando de quebra Ambiente de uso: servidor, localização, se; A diretiva completa o conjunto de regras atual e não gerencia mais a diretiva de reescrita.
2. Se diretiva Ambiente de uso: servidor, localização Essa instrução é usada para verificar se uma condição é cumprida e, se sim, executar a instrução dentro dos colchetes curtilhos. O comando If não suporta aninhamento, e não suporta múltiplas condições && e || Tratamento.
3. Comando de retorno sintaxe: returncode ; Ambiente de uso: servidor, localização, se; Essa instrução é usada para encerrar a execução da regra e retornar um código de status ao cliente. Exemplo: Se a URL visitada terminar em ".sh" ou ".bash", um código de status 403 é retornado Localização ~ .*\. (sh|bash)?$
{ retorno 403;
}
4. Comando de regravação Sintaxe: flag de substituição rewriteegex Ambiente de uso: servidor, localização, se Essa diretiva redireciona o URI com base na expressão, ou modifica a string. As instruções são executadas na ordem do arquivo de configuração. Note que reescrever expressões só é válido para caminhos relativos. Se você quiser emparelhar nomes de host, deve usar instruções if, por exemplo, abaixo: if( $host ~* www\.(. *) )
{ Definir $host_sem_www $1; reescrever ^(.*)$ http://$host_without_www$1permanent;
}
5. Comando Set Sintaxe: valor da variável conjunta; Padrão: nenhum; Ambiente de uso: servidor, localização, se; Essa diretiva é usada para definir uma variável e atribuir um valor a ela. O valor de uma variável pode ser texto, variável ou união de variáveis de texto. Exemplo: set$varname "olá mundo";
6.Uninitialized_variable_warn instruções Sintaxe: uninitialized_variable_warnon|off Ambiente de uso: http, servidor, localização, se Esse comando é usado para ativar e desligar a mensagem de aviso para variáveis não inicializadas, e o valor padrão é Ligado.
Cinco. Exemplo de escrita de regras Nginx Rewrite 1. Quando o arquivo e diretório acessados não existirem, redirecione para um determinado arquivo php if( !-e $request_nome do arquivo )
{ reescrita ^/(.*)$ index.php último;
}
2. Troca de diretório /123456/xxxx ====> /xxxx?id=123456 reescrever ^/(\d+)/(.+)/ /$2?id=$1 último;
3. Se o cliente estiver usando o navegador IE, ele redireciona para o diretório /ie if( $http_user_agent ~ MSIE)
{ reescrita ^(.*)$ /ie/$1 quebra;
}
4. Desabilitar o acesso a múltiplos diretórios Localização ~ ^/(cron|templates)/
{ negar tudo; intervalo;
}
5. Desabilitar o acesso a arquivos que começam com /data Localização ~ ^/Data
{ negar tudo;
}
6. Proibir o acesso a arquivos com nomes de sufixos .sh, .flv, .mp3 Localização ~ .*\. (sh|flv|mp3)$
{ retorno 403;
}
7. Defina o tempo de cache do navegador para certos tipos de arquivos Localização ~ .*\. (gif|jpg|jpeg|png|bmp|swf)$
{ expira em 30d;
} Localização ~ .*\. (js|css)$
{ expira 1h;
}
8. Definir prazos de validade para favicon.ico e robots.txt; Aqui, o favicon.ico é de 99 dias, o robots.txt de 7 dias, e o registro de erro 404 não é registrado Localização ~(favicon.ico) { log_not_found desligado; expira em 99d; intervalo;
} localização ~(robots.txt) { log_not_found desligado; expira 7d; intervalo;
}
9. Definir o tempo de validade de um determinado documento; Isso é de 600 segundos, e os registros de acesso não são registrados Localização ^~ /html/scripts/loadhead_1.js { access_log desligado; root /opt/lampp/htdocs/web; expira 600; intervalo;
}
10. Arquivos anti-hotlink e prazos de expiração definidos O Return412 aqui é um código de status HTTP personalizado, que por padrão é 403, o que é conveniente para encontrar a solicitação correta de hotlink "reescrever ^/ ; "Mostra uma imagem de um anti-hotlink "access_log fora;" Nenhum log de acesso é registrado, reduzindo o estresse "Expira 3D" 3 dias de cache do navegador para todos os arquivos
Localização ~*^.+\. (jpg|jpeg|gif|png|swf|rar|zip|css|js)$ { valid_referers nenhum bloqueou *.xx.com*.xx.net localhost 208.97.167.194; if ($invalid_referente) { reescrita ^/ ; retorno 412; intervalo;
} access_log desligado; root /opt/lampp/htdocs/web; expira 3d; intervalo;
}
11. Permitir acesso fixo ao site apenas com senha
root /opt/htdocs/www; permitir 208.97.167.194; permitir 222.33.1.2; permitir 231.152.49.4; negar tudo; auth_basic "C1G_ADMIN"; auth_basic_user_file htpasswd;
12Converter arquivos em diretórios multinível em um único arquivo para aprimorar os efeitos de SEO
/job-123-456-789.html 指向/job/123/456/789.html
reescrever^/job-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /job/$1/$2/jobshow_$3.html último;
13. Redirecionar quando arquivos e diretórios não existirem:
if (!-e $request_nome do arquivo) { proxy_pass http://127.0.0.1;
}
14. Apontar uma pasta no diretório raiz para o diretório de nível 2 Por exemplo, /shanghaijob/ aponta para /área/xangai/ Se você mudar last para permanente, então a barra de endereços do navegador será /location/shanghai/ reescrever ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last; O problema com o exemplo acima é que ele não corresponde ao acessar /shanghai rewrite ^/([0-9a-z]+)job$ /area/$1/ last; reescrever ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last; Essa forma/xangai também é acessível, mas os links relativos na página não estão disponíveis, Se ./list_1.html endereço real for /area/shanghia/list_1.html se tornará /list_1.html, tornando-o inacessível. Aí não posso adicionar pulo automático (-d $request_nome do arquivo) tem uma condição de que deve ser um diretório real, e minha reescrita não é, então não tem efeito se (-d $request_nome do arquivo){ reescrever ^/(.*)([^/])$ http://$host/$1$2/permanent;
} É fácil depois de saber o motivo, deixe-me pular manualmente rewrite ^/([0-9a-z]+)job$ /$1job/permanent; reescrever ^/([0-9a-z]+)job/(.*)$ /area/$1/$2last;
15. Mudança de nome de domínio Servidor
{ ouça 80; server_name jump.linuxidc.com; índice index.html index.htm index.php; root /opt/lampp/htdocs/www; reescrita ^/ http://www.xx.com/; access_log desligado;
}
16. Torneamento multidomínio server_name www.xx.comwww.xx.com; índice index.html index.htm index.php; root /opt/lampp/htdocs; if ($host ~ "linuxidc\.net") { reescrita ^(.*) http://www.xx.com$1permanent;
}
6. Variáveis globais nginx arg_PARAMETER #这个变量包含GET请求中, se existir um PARÂMETRO variável. args #这个变量等于请求行中 parâmetros (requisição GET), por exemplo, foo=123&bar=blahblah; binary_remote_addr #二进制的客户地址. body_bytes_sent #响应时送出的body字节数数量. Esses dados são precisos mesmo que a conexão seja interrompida. Campo de content_length #请求头中的Content comprimento. Campo do tipo content_type #请求头中的Content. cookie_COOKIE #cookie o valor da variável COOKIE document_root #当前请求在root指令中指定的值. document_uri #与uri相同. #请求主机头字段 host, caso contrário, o nome do servidor. Nome de hostname #Set ao nome de host da Máquina conforme retornado por gethostname http_HEADER is_args #如果有args参数, essa variável é igual a "?", caso contrário igual a "", valor nulo. http_user_agent #客户端agent信息 http_cookie #客户端cookie信息 limit_rate #这个变量可以限制连接速率. query_string #与args相同. request_body_file #客户端请求主体信息的临时文件名. request_method #客户端请求的动作, geralmente GET ou POST. remote_addr #客户端的IP地址. remote_port #客户端的端口. remote_user #已经经过Auth Nome de usuário validado pelo Módulo Básico. request_completion #如果请求结束, coloque em OK. Esvaziar quando a solicitação não for concluída ou se a solicitação não for a última na cadeia de requisições. request_method #GET或POST request_filename #当前请求的文件路径, gerado por diretivas raiz ou alias e requisições de URI. request_uri #包含请求参数的原始URI, ele não contém o nome do host, por exemplo, "/foo/bar.php?arg=baz". não pode ser modificado. esquemas #HTTP方法 (ex.: http, https). server_protocol #请求使用的协议, geralmente HTTP/1.0 ou HTTP/1.1. server_addr #服务器地址, esse valor pode ser determinado após a conclusão de uma chamada de sistema. server_name #服务器名称. server_port #请求到达服务器的端口号.
Sete. Correspondência entre as regras Apache e Nginx O RewriteCond do Apache corresponde ao Nginx se A Regra RewriteRule de Apache corresponde à reescrita de Nginx O [R] de Apache corresponde ao redirecionamento de Nginx [P] em Apache corresponde ao último em Nginx O [R,L] de Apache corresponde ao redirecionamento de Nginx O [P,L] de Apache corresponde ao último de Nginx O [PT,L] de Apache corresponde ao último de Nginx
Por exemplo, permita que um nome de domínio especificado acesse esse site e sempre recorra a www.xx.com outros nomes de domínio Apache: RewriteCond %{HTTP_HOST} !^(.*?) \.aaa\.com$[NC] RewriteCond %{HTTP_HOST} !^localhost$ RewriteCond %{HTTP_HOST}!^192\.168\.0\. (.*?) $ Regra ReescreverT^/(.*)$ http://www.xx.com[R,L]
Nginx: if( $host ~* ^(.*)\.aaa\.com$ )
{ Conjunto $allowHost '1';
} if( $host ~* ^localhost )
{ Conjunto $allowHost '1';
} if( $host ~* ^192\..168\.1\..(. *?) $ )
{ Conjunto $allowHost '1';
} se( $allowHost !~ '1' )
{ reescrever ^/(.*)$ http://www.xx.comredirect ;
}
|