Como Usar Regras de Reescrita .htaccess

  • APLICA-SE A: TODOS OS VPS
    • Dificuldade: Fácil
    • Tempo Necessário: 10
    • Ferramentas necessárias: Editor de texto sem formatação, FTP

VISÃO GLOBAL

O módulo Apache mod_rewrite permite reescrever solicitações de URL que chegam ao seu servidor e é baseado em um analisador de expressões regulares. Os exemplos apresentados aqui mostram como:

Solicitações diretas de um subdiretório para um subdiretório diferente ou para o diretório principal (raiz do documento)
Exemplo: http://example.com/folder1/ torna-se http://example.com/folder2/ ou apenas http://example.com/ .

Solicitações diretas para um subdiretório
Exemplo: http://example.com/file.html se torna http://example.com/folder1/file.html .

Adicione www a todas as solicitações.
Exemplo: http://example.com se torna http://www.example.com . Ou converta http: // para https: // .

Converter URL para todas as letras minúsculas usando Rewrite Map
Exemplo: YourDomaIn.com/recIpeS.html torna-se seudominio.com/recipes
Isso ajudará a impedir que erros de digitação produzam erros http. 

mod_rewrite

Quando implementado corretamente, mod_rewriteé muito poderoso. Existem muitos outros aplicativos para os mod_rewritequais você pode aprender em apache.org . Consulte o site para outros possíveis cenários de reescrita.

Esses exemplos são fornecidos como cortesia – (mt) O Media Temple não cria regras de reescrita personalizadas para sites de clientes individuais.

LEIA-ME PRIMEIRO

Este artigo é fornecido como cortesia. Instalar, configurar e solucionar problemas de aplicativos de terceiros está fora do escopo geral de suporte.

Exigências

Antes de começar, tenha em mãos:

  • Credenciais de usuário FTP

INSTRUÇÕES

  1. Crie um arquivo .htaccess em texto sem formatação (clique no link para obter detalhes sobre esse tipo de arquivo) ou adicione as linhas do exemplo na parte superior do arquivo .htaccess existente.
  2. Adicione as linhas do exemplo apropriado ao seu arquivo. Observe que você deve substituir o texto de exemplo por suas próprias informações. Substitua example.com pelo seu próprio domínio, folder1 pelo seu próprio nome de pasta, file.html pelo seu próprio nome de arquivo, etc. Salve as alterações.
  3. Use  ou  para carregar o arquivo na raiz do documento do domínio apropriado. Se o seu domínio for example.com , você deverá enviar o arquivo para:
    • /var/www/vhosts/example.com/httpdocs/

É isso aí! Depois de fazer o upload do arquivo, a regra de reescrita deverá entrar em vigor imediatamente.

Alguns sistemas de gerenciamento de conteúdo (CMSs), como o WordPress, por exemplo, substituem os arquivos .htaccess com suas próprias configurações. Nesse caso, talvez seja necessário descobrir uma maneira de reescrever a partir do CMS.

Solicitações diretas de um subdiretório para um subdiretório diferente ou a raiz do documento

http://example.com/folder1/ se torna http://example.com/folder2/ ou apenas http://example.com/.

domínios /example.com/html/folder2/ devem existir e ter conteúdo para que isso funcione. .htaccess

Esse arquivo .htaccess redirecionará http://example.com/folder1/ para http://example.com/folder2/. Escolha esta versão se você não tiver a mesma estrutura de arquivos nos dois diretórios:

Nome do arquivo: .htaccess

Opções + FollowSymLinks
RewriteEngine On
RewriteRule ^ folder1. * $ Http://example.com/folder2/ [R = 301, L]
  • Este arquivo .htaccess redirecionará http://example.com/folder1/ para http://example.com/ simples. Escolha esta versão se desejar que as pessoas sejam redirecionadas para sua página inicial, e não qualquer página individual na pasta antiga que eles originalmente solicitaram:

Nome do arquivo: .htaccess .

Opções + FollowSymLinks
RewriteEngine On
RewriteRule ^ folder1. * $ Http://example.com/ [R = 301, L]
  • Esse arquivo .htaccess redirecionará http://example.com/folder1/file.html para http://example.com/folder2/file.html . Escolha esta versão se o seu conteúdo estiver duplicado nos dois diretórios:

Nome do arquivo: .htaccess

Opções + FollowSymLinks
RewriteEngine On
RewriteRule ^ folder1 /(.*)$ http://gs.mt-example.com/folder2/$1 [R = 301, L]

Teste

Carregue esse arquivo na pasta2 (se você seguiu o primeiro ou terceiro exemplo) ou na pasta html (se você seguiu o segundo exemplo) com FTP :

Nome do arquivo: index.html

<html>
<body>
Mod_rewrite está funcionando!
</body>
</html>

Então, se você seguiu o primeiro ou o segundo exemplo, visite http://example.com/folder1/ no seu navegador. Você deve ver a alteração do URL para http://example.com/folder2/ ou http://example.com/ e o conteúdo da página de teste.

Se você seguiu o terceiro exemplo, visite http://example.com/folder1/index.html . Você deve ser redirecionado para http://example.com/folder2/index.html e ver o conteúdo da página de teste.Explicação do código

  • Opções + FollowSymLinks é uma diretiva Apache, pré-requisito para mod_rewrite.
  • RewriteEngine On habilita mod_rewrite.
  • RewriteRule define uma regra específica.
  • A primeira sequência de caracteres após RewriteRule define a aparência da URL original. Há uma explicação mais detalhada dos caracteres especiais no final deste artigo.
  • A segunda sequência após RewriteRule define o novo URL. Isso está relacionado ao diretório raiz do documento (html). / significa o próprio diretório html e subpastas também podem ser especificadas.
    • $ 1 no final corresponde à parte entre parênteses () da primeira string. Basicamente, isso garante que as subpáginas sejam redirecionadas para a mesma subpágina e não para a página principal. Deixe de fora para redirecionar para a página principal. (É deixado de fora nos dois primeiros exemplos por esse motivo. Se você não tiver o mesmo conteúdo no novo diretório que possuía no diretório antigo, deixe-o de fora.)
  • [R = 301, L] – executa um redirecionamento 301 e também impede que regras de reescrita posteriores afetem esse URL (uma boa idéia para adicionar após a última regra). É na mesma linha que RewriteRule , no final.

SOLICITAÇÕES DIRETAS PARA UM SUBDIRETÓRIO

http://example.com/file.html passa a http://example.com/folder1/file.html .

Nota: A pasta de diretório1 deve ser exclusiva na URL. Não funcionará para http://example.com/folder1/folder1.html . A pasta de diretório1 deve existir e conter conteúdo.

.HTACCESS

  • Esse arquivo .htaccess redirecionará http://example.com/file.html para http://example.com/folder1/file.html :

Nome do arquivo: .htaccess

Opções + FollowSymLinks
RewriteEngine On
RewriteCond% {HTTP_HOST} example.com $ [NC]
RewriteCond% {HTTP_HOST}! Folder1
RewriteRule ^ (. *) $ Http://example.com/folder1/$1 [R = 301, L]

Teste

Faça o upload deste arquivo para a pasta1 com FTP :

Nome do arquivo: index.html

<html>
<body>
Mod_rewrite está funcionando!
</body>
</html>

Em seguida, visite http://example.com/ no seu navegador. Você deve ver o URL mudar para http://example.com/folder1/ e o conteúdo da página de teste.Explicação do código

  • Opções + FollowSymLinks é uma diretiva Apache, pré-requisito para mod_rewrite.
  • RewriteEngine On habilita mod_rewrite.
  • RewriteCond% {HTTP_HOST} mostra quais URLs fazemos e não desejam executar a reescrita.
    • Nesse caso, queremos corresponder example.com.
    • ! significa “não”. Não queremos reescrever um URL que já inclua pasta1 , pois continuaria recebendo a pasta1 adicionada e se tornaria um URL infinitamente longo.
  • [NC] corresponde às versões em maiúsculas e minúsculas do URL.
  • RewriteRule define uma regra específica.
  • A primeira sequência de caracteres após RewriteRule define a aparência da URL original. Há uma explicação mais detalhada dos caracteres especiais no final deste artigo.
  • A segunda sequência após RewriteRule define o novo URL. Isso está relacionado ao diretório raiz do documento (html). / significa o próprio diretório html e subpastas também podem ser especificadas.
    • $ 1 no final corresponde à parte entre parênteses () da primeira string. Basicamente, isso garante que as subpáginas sejam redirecionadas para a mesma subpágina e não para a página principal. Deixe-o de fora para redirecionar para a página principal do subdiretório.
  • [R = 301, L] – executa um redirecionamento 301 e também impede que regras de reescrita posteriores afetem esse URL (uma boa idéia para adicionar após a última regra). É na mesma linha que RewriteRule , no final.

ADICIONE WWW OU HTTPS

http://example.com passa a http://www.example.com. Ou http://example.com se torna https://example.com..htaccess

  • Esse arquivo .htaccess redirecionará http://example.com/ para http://www.example.com/. Também funcionará se um arquivo individual for solicitado, como http://example.com/file.html:

Nome do arquivo: .htaccess

Opções + FollowSymLinks
RewriteEngine on
RewriteCond% {HTTP_HOST} ^ example.com [NC]
RewriteRule ^ (. *) $ Http://www.example.com/$1 [R = 301, L]
  • Este arquivo .htaccess redirecionará http://example.com/ para https://example.com/. Também funcionará se um arquivo individual for solicitado, como http://example.com/file.html:

Nome do arquivo: .htaccess

RewriteEngine On
RewriteCond% {SERVER_PORT} 80
RewriteRule ^ (. *) $ Https://www.example.com/$1 [R, L]

Teste

Visite http://example.com no seu navegador. Você deve ver que a mesma página é exibida, mas o URL foi alterado para http://www.example.com (primeiro exemplo) ou https://example.com (segundo exemplo).

Além disso, http://example.com/file.html se tornará http://www.example.com/file.html ou https://example.com/file.html .Explicação do código

  • Opções + FollowSymLinks é uma diretiva Apache, pré-requisito para mod_rewrite.
  • RewriteEngine On habilita mod_rewrite.
  • RewriteCond% {HTTP_HOST} mostra quais URLs fazemos e não desejam executar a reescrita.
    • Nesse caso, queremos corresponder a qualquer coisa que comece com example.com.
  • [NC] corresponde às versões em maiúsculas e minúsculas do URL.
  • RewriteRule define uma regra específica.
  • A primeira sequência de caracteres após RewriteRule define a aparência da URL original. Há uma explicação mais detalhada dos caracteres especiais no final deste artigo.
  • A segunda sequência após RewriteRule define o novo URL. Isso está relacionado ao diretório raiz do documento (html). / significa o próprio diretório html e subpastas também podem ser especificadas.
    • $ 1 no final corresponde à parte entre parênteses () da primeira string. Basicamente, isso garante que as subpáginas sejam redirecionadas para a mesma subpágina e não para a página principal.
  • [R = 301, L] – executa um redirecionamento 301 e também impede que regras de reescrita posteriores afetem esse URL (uma boa idéia para adicionar após a última regra). É na mesma linha que RewriteRule , no final.

CONVERTER URL PARA TODAS AS LETRAS MINÚSCULAS USANDO REESCREVER MAPA

Essa regra .htaccess garantirá que todos os caracteres inseridos em uma URL sejam convertidos em minúsculas. Isso ajuda a evitar erros causados ​​por erros de digitação.

www.examPLe.com/recIPes  torna-se www.example.com/recipes 

Nota: Como esta regra exige uma edição em um arquivo de configuração no nível do servidor, os usuários do Grid e do WordPress Gerenciado não poderão implementar esta regra. 

Para que isso funcione corretamente, você também deve adicionar uma diretiva ao seu arquivo vhost (httpd.conf):

<IfModule mod_rewrite.c>
        RewriteMap lc int : tolower
</IfModule>
  •  Para o Plesk: Navegue para Domínios> example.com> Configurações de hospedagem na Web> Diretivas adicionais do Apache e coloque o código acima. 

Em seguida, abra seu .htaccess e adicione as seguintes linhas:

RewriteEngine On 
RewriteCond% {REQUEST_URI} [AZ] 
RewriteRule. $ {lc:% {REQUEST_URI}} [R = 301, L]

Nota: Em vez de usar o RewriteMap para converter URLs em letras minúsculas, o Apache recomenda que o mod_spelling seja usado para ignorar as diferenças entre maiúsculas e minúsculas. 

Teste

Navegue para o seu domínio usando uma combinação de letras maiúsculas e minúsculas.

 Código Explicação

  • RewriteEngine On habilita mod_rewrite.
  • RewriteCond% {REQUEST_URI} [AZ] – pega o endereço digitado.
  • RewriteRule. $ {lc:% {REQUEST_URI}} – Usa a variável ‘lc’ que foi adicionada ao arquivo vhost para converter todos os caracteres em minúsculas. 
  • [R = 301, L] – executa um redirecionamento 301 e também impede que regras de reescrita posteriores afetem esse URL (uma boa idéia para adicionar após a última regra). É na mesma linha que RewriteRule , no final.

Expressões regulares

As regras de reescrita geralmente contêm símbolos que formam uma expressão regular (regex). É assim que o servidor sabe exatamente como você deseja que seu URL seja alterado. No entanto, expressões regulares podem ser difíceis de decifrar à primeira vista. Aqui estão alguns elementos comuns que você verá nas regras de reescrita, além de alguns exemplos específicos.

  • ^ inicia a linha correspondente.
  • $ termina a linha para corresponder.
    • Então, ^ folder1 $ corresponde exatamente à pasta1 .
  • . significa “qualquer caractere que não seja um espaço em branco” (exemplo: a, B, 3).
  • * significa que o caractere anterior pode corresponder a zero ou mais vezes.
    • Então, ^ uploads. * $ Corresponde uploads2009 , uploads2010 , etc.
    • ^. * $ significa “combinar tudo e qualquer coisa”. Isso é útil se você não souber o que seus usuários podem digitar para o URL.
  • () designa qual parte preservar para uso novamente na variável $ 1 na segunda string. Isso é útil para lidar com solicitações de arquivos específicos que devem ser iguais nas versões antiga e nova da URL.

Veja mais expressões regulares em perl.org .

SOLUÇÃO DE PROBLEMAS

404 NÃO ENCONTRADO

Examine atentamente o novo URL no seu navegador. Corresponde a um arquivo que existe no servidor no novo local especificado pela regra de reescrita? Talvez você precise tornar sua regra de reescrita mais ampla (talvez seja possível remover o $ 1 da segunda sequência). Isso irá reescrever a página de índice principal fornecida na segunda string. Ou pode ser necessário copiar arquivos do seu local antigo para o novo local.

Se o URL estiver errado (como http://example.com/folder1//file.html – observe os dois / s), será necessário reexaminar sua sintaxe. (mt) O Media Temple não suporta a solução de problemas de sintaxe.

URL INFINITO, TEMPO LIMITE, LOOP DE REDIRECIONAMENTO

Se você perceber que seu URL é ridiculamente longo, que sua página nunca carrega ou que seu navegador envia uma mensagem de erro sobre o redirecionamento, é provável que você tenha redirecionamentos conflitantes.

Você deve verificar todo o arquivo .htaccess quanto a regras de reescrita que possam corresponder a outras regras de reescrita. Você também pode precisar verificar os arquivos .htaccess nos subdiretórios. Observe que o FTP não mostrará arquivos .htaccess, a menos que você tenha ativado a opção de exibir arquivos e pastas ocultos. Veja nosso artigo .htaccess para obter detalhes.

Além disso, é possível incluir redirecionamentos nas páginas HTML e PHP. Verifique a página que você estava testando para obter seus próprios redirecionamentos.

Adicionar [L] após uma regra de reescrita pode ajudar em alguns casos, porque isso instrui o servidor a parar de tentar reescrever uma URL depois de aplicar essa regra.

RECURSOS

Documentos do Apache para mod_rewrite