Crie redirecionar e reescrever regras para .Htaccess no Apache WebServer

Crie redirecionar e reescrever regras para .Htaccess no Apache WebServer

Ao usar o servidor da Web Apache, .htaccess Os arquivos (também chamados de "arquivos de configuração distribuídos") são usados ​​para especificar a configuração por diretório, ou mais geralmente para modificar o comportamento do servidor da Web Apache sem ter que acessar os arquivos de hosts virtuais diretamente (isso geralmente é impossível, por exemplo, em hosts compartilhados). Neste tutorial, vemos como podemos estabelecer redirecionamentos de URL e reescrevendo regras dentro .htaccess arquivos.

Neste tutorial, você aprenderá:

  • Como .Os arquivos htaccess funcionam
  • Como configurar as regras de reescrita de URL em .arquivos htaccess usando o Reescriture diretivo
  • Como configurar regras de redirecionamento de URL em .arquivos htaccess usando o Redirecionar e RedirectMatch diretivas
Crie redirecionar e reescrever regras para .Htaccess no Apache WebServer

Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Distribuição Independente
Programas Servidor da web apache
Outro Nenhum outro requisito necessário
Convenções # - requer que os comandos linux -comidos sejam executados com privilégios de raiz diretamente como usuário root ou por uso de sudo comando
$-exige que o Linux-Commands seja executado como um usuário não privilegiado regular

Você deve usar .arquivos htaccess?

Como já mencionamos, o uso de .htaccess Os arquivos não são recomendados se você puder operar diretamente em arquivos de configuração do host virtual, pois diminui o servidor da Web do Apache (quando o Allowoverride A diretiva é usada para permitir o uso de .htaccess Arquivos, o servidor da web digitaliza todos os diretórios que procuram por eles). Em algumas situações, no entanto, o uso de .htaccess arquivos é a única solução.

O conjunto de diretrizes que podem ser usadas em .htaccess Os arquivos são estabelecidos na configuração principal do site através do Allowoverride diretiva, dentro de um estrofe; Por exemplo, para permitir o uso de todas as diretivas possíveis, escrevíamos algo como:

 Allowoverride tudo  

As instruções serão aplicadas a .htaccess arquivos encontrados no diretório especificado e em todas as suas subdiretas.

Para as diretivas que usaremos neste tutorial para funcionar, o mod_alias e mod_rewrite Os módulos Apache devem estar ativados.

Redirecionamentos (mod_alias)

Conforme especificado antes, em nosso .htaccess Arquivos, podemos querer especificar algumas regras de redirecionamento, para que, quando um URL for solicitado, o cliente seja redirecionado para outro.

Temos basicamente duas maneiras de executar a operação: usando o Redirecionar ou o RedirectMatch diretivas. Qual é a diferença entre os dois? O primeiro vamos estabelecer um redirecionamento baseado em correspondências simples e simples de URL; o primeiro faz basicamente a mesma coisa, mas é mais poderoso, pois com ele podemos usar expressões regulares.

A diretiva "redireciona"

Vamos ver alguns exemplos do uso do redirecionar diretivo. Suponha que queremos redirecionar todo o nosso site:

Redirecionar 301/https: // url/para/redirecionar/para 


O acima é um exemplo bastante "extremo". Vamos analisar a sintaxe. Como a primeira coisa que especificamos a diretiva: Redirecionar.

A segunda coisa que fornecemos é o código HTTP a ser usado para o redirecionamento: isso pode ser fornecido como um status numérico ou na forma de uma string.
Alguns exemplos:

Código HTTP Palavra -chave
301 permanente
302 Temp
303 Veja outro
410 perdido

No exemplo anterior, configuramos um permanente redirecionamento desde que usamos o 301 Código HTTP. Um equivalente a isso seria:

Redirecionar permanente/https: // url/to/redirecion 

O tipo de redirecionamento pode ser omitido por completo: quando é o caso, o 302 Código (redirecionamento temporário) é usado por padrão.

O terceiro argumento que fornecemos na regra é o absoluto caminho do recurso "original" que deve ser comparado. Nesse caso, usamos / qual é a raiz do site, já que queremos redirecioná -lo completamente. Aqui o esquema e hospedar parte do URL deve ser omitido.

O quarto argumento é o URL "novo" que o usuário deve ser redirecionado para. Nesse caso, como fizemos no exemplo acima, podemos usar um URL completo, incluindo esquema e hospedar, ou omiti -los e usar apenas um caminho: neste último caso, seria considerado como parte do mesmo site original. Este argumento é obrigatório se o status de redirecionamento especificado estiver entre 301 e 399, mas isso deve ser omitido Se o status fornecido não estiver nesse intervalo. Isso faz sentido: imagine que usamos um 410 status para sinalizar que o recurso se foi: não teria sentido especificar um URL de redirecionamento. Nesse caso, simplesmente escrevemos:

Redirecionar 410/Path/Of/Recurso 


A diretiva "RedirectMatch"

Com a diretiva "redirecionada", podemos especificar o caminho do URL a ser redirecionado, mas deve corresponder claro e simples, pois é especificado. E se quisermos executar algo mais complexo, como por exemplo, para redirecionar solicitações para todos os arquivos com o .html extensão? Nesses casos, podemos usar o RedirectMatch diretiva e use um expressão regular. Vamos ver um exemplo:

RedirectMatch 301 (.*) \.HTML $ $ 1.php 

No exemplo acima, redirecimos todos os pedidos para .html arquivos em nosso site para arquivos com o mesmo nome e caminho, mas com o .php extensão. Vamos analisar a regra.

Como sempre, a primeira coisa que fornecemos é a diretiva, neste caso RedirectMatch. Depois disso, como fizemos antes, fornecemos o código HTTP a ser usado para o redirecionamento; Então, e isso é a coisa interessante, usamos o (.*) \.html $ expressão regular.

Para aqueles que já estão familiarizados com regex Isso deve ser imediatamente claro, mas vamos ver como funciona: o . (DOT) na expressão regular corresponde a todos os caracteres: é seguido pelo * que estabelecem que a expressão anterior deve ser correspondida 0 ou mais vezes. A expressão está fechada entre parênteses, por isso é agrupada e a parte do URL que corresponde a ela pode ser referenciada posteriormente através do $ 1 variável (vários grupos podem ser usados ​​- eles são 'nomeados' progressivamente; portanto, por exemplo, para corresponder ao segundo grupo que podemos usar $ 2). Após a parte da expressão fechada entre parênteses, especificamos que o caminho deveria terminar em .html: você pode ver que escapamos do . com uma barra de barriga para isso
ser correspondido literalmente. Finalmente usamos $ Para corresponder ao final da linha.

Como argumento para o URL de redirecionamento, usamos $ 1.php. Como já explicamos o $ 1 é usado para fazer referência à parte do URL que correspondia à expressão regular entre parênteses (que é o caminho completo menos o .html extensão), então o que estamos fazendo aqui é basicamente usar o mesmo caminho, mas com o .php extensão.

Reescrita de URL (mod_rewrite)

As regras de reescrita de URL podem ser ambas transparente ou visível pelo usuário. No primeiro caso, o usuário solicita uma página e o servidor, internamente, traduz a solicitação na base da regra fornecida para servir ao recurso: o usuário não percebe o que está acontecendo, já que o URL em seu navegador não faz '' T mudança. No segundo caso, em vez disso, praticamente alcançamos um redirecionamento completo visível pelo usuário.

Vamos começar com o primeiro caso. Se queremos usar a reescrita de URL, a primeira coisa que temos que fazer (neste caso em nosso .htaccess arquivo) é escrever a seguinte diretiva:

RewriteEngine 

O RewriteEngine A diretiva, como o nome sugere, é necessária para modificar o estado do mecanismo de reescrita Apache. No exemplo acima, nós o ativamos; Para desativá -lo, em vez disso, devemos escrever:

RewriteEngine 


Apenas como exemplo, suponha que tenhamos um recurso chamado página.html Em nosso servidor, que costumava ser alcançado pelo URL simples e simples: http: // localhost/página.html. Agora imagine que, por algumas razões, renomeamos o arquivo html, para nova página.html, Mas, por razões óbvias, queremos que nossos clientes ainda possam alcançar o recurso com o URL antigo (talvez eles o tenham armazenado em seus marcadores de navegador). O que poderíamos fazer é escrever o seguinte, muito
Regra simples:

RewriteEngine on Rewriture ^página \.html /newpage.html 

A sintaxe da regra é muito semelhante à que usamos para o RedirectMatch Diretiva: Primeiro temos a própria diretiva, Reescriture, do que temos o padrão usado para a correspondência de URL: deve ser um regex. Depois disso, temos o substituição string, que é usada para substituir o URL original.

Há um quarto elemento que pode ser usado na definição de um Reescriture são as bandeiras, que são usados ​​para modificar o comportamento do servidor da web quando uma determinada regra é correspondente.

Vamos ver um exemplo: com a regra que definimos acima, como já dissemos, nenhum redirecionamento acontece: o URL na barra de endereço do navegador não muda. Se queremos que um redirecionamento aconteça, temos que adicionar o R Bandeira para a expressão:

RewriteEngine on Rewriture ^página \.html /newpage.html [r] 

São fornecidos bandeiras entre colchetes: neste caso específico R A bandeira faz com que a regra seja interpretada como um redirecionamento. É até possível especificar o tipo de redirecção que deve ocorrer, especificando o código HTTP relacionado, por exemplo:

Rewriture ^página \.html /newpage.html [r = 301] 

Outra coisa comum que a reescrita de URL está acostumada é "embelezar" URLs, para fins de SEO. Digamos que, por exemplo, temos um script PHP que recupera de um banco de dados um determinado produto eu ia fornecido como um parâmetro de consulta em
O URL, por exemplo:

http: // localhost/produtos.php?id = 1 

Para disponibilizar o recurso no http: // localhost/produtos/1 URL, poderíamos escrever a seguinte regra:

RewriteEngine on Rewriture ^Products /([0-9]+) $ /Produtos.php?id = $ 1 

Com o [0-9] regex, combinamos todos os dígitos e com o + Dizemos que a expressão anterior deve corresponder 1 ou mais vezes Para que a regra seja executada. A expressão correspondente é fechada entre parênteses, para que possamos referir a parte correspondente da URL na sequência de "destino", usando o $ 1 variável. Dessa forma, o ID do produto que fornecemos no URL "embelezado" se torna o valor do eu ia variável na sequência de consultas.

Reescrever condições

Acabamos de ver como, para que uma regra de reescrita seja aplicada, a expressão regular deve corresponder ao URL fornecido pelo usuário. No último exemplo, vimos como o http: // localhost/produtos/1 URL pode ser reescrito internamente para http: // localhost/produtos.php?id = 1. Mas e se o caminho especificado pelo novo URL faz referência a um arquivo "real" existente no servidor? E se, por exemplo, /Produtos/1 é um arquivo regular e queremos que seja servido como é? Em casos como este, podemos usar o Reescreva diretivo.

Com o Reescreva Diretiva, especificamos uma condição que deve ser respeitada para que a reescrita de URL ocorra. Nesse caso, por exemplo, podemos querer estabelecer que se o Produtos/1 Existe um arquivo no servidor, o redirecionamento
não deve ocorrer. Nós escrevíamos:

RewriteEngine no rewritecond %request_filename !-f Rewriture ^Products /([0-9]+) $ /Produtos.php?id = $ 1 

Nós usamos o Reescreva diretiva, antes do Reescriture. A primeira coisa que passamos para a diretiva é o String de teste isso deve ser correspondido. Nesse contexto, podemos usar uma série de variáveis ​​de servidor predefinidas, como %Request_filename:
referencia o O caminho completo do sistema de arquivos local para o arquivo ou script correspondendo à solicitação.

Aqui não podemos fornecer uma lista completa de todas as variáveis ​​disponíveis, que você pode encontrar visitando a documentação do Apache Mod_rewrite.

Após a "sequência de teste", especificamos a condição que deve ser correspondente: neste caso, usamos !-f Para especificar que, para que o URL de reescrita seja aplicado, o arquivo ou script correspondente à solicitação não deve ser um arquivo regular existente no servidor (-f corresponde a um arquivo regular e ! inverte o resultado).

O acima, é um exemplo realmente simples de um Reescreva Diretiva: mais de um pode ser fornecido antes do Reescriture Diretiva: todos eles devem corresponder para que o último seja aplicado.

Conclusões

Neste artigo, vimos como podemos especificar redirecionamentos de URL e regras de reescrita de URL para .htaccess Arquivos ao usar o servidor da Web Apache. Vimos alguns exemplos muito fáceis do uso do Redirecionar, RedirectMatch e Reescriture diretivas e como podemos usá -las para alcançar comportamentos específicos. Isso foi feito como uma introdução aos referidos sujeitos, por isso, dê uma olhada nas páginas oficiais de documentação para os módulos mod_alias e mod_rewrite para um conhecimento mais profundo.

Tutoriais do Linux relacionados:

  • Configuração do OpenLITESPEED HTACCESS
  • Habilitar .htaccess no Apache 2 Linux Server
  • Como gerenciar hosts virtuais dinâmicos com Apache e…
  • Como migrar o Apache para o nginx convertendo o VirtualHosts para…
  • Apache IP e hosts virtuais baseados em nome explicados
  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Como usar o Apache para redirecionar todo o tráfego de HTTP para HTTPS
  • Como configurar o vsftpd no Debian
  • Mastering Bash Script Loops
  • Analisador Linux Apache Log