O mod_rewrite é conhecido como o “canivete suíço” do Apache, e por um bom motivo. Ele permite que você manipule URLs de forma quase ilimitada, transformando endereços feios e complexos em links limpos e amigáveis para SEO (ou simplesmente redirecionando tráfego de forma inteligente).
No Linux, a implementação segue um fluxo lógico de ativação, configuração e execução. Vamos por partes.
🛠️ Passo 1: Habilitar o Módulo
Diferente de outros módulos, o mod_rewrite geralmente vem instalado, mas desativado por padrão em distribuições como Ubuntu e Debian.
- Abra o terminal e execute:Bash
sudo a2enmod rewrite - Reinicie o Apache para aplicar a mudança:Bash
sudo systemctl restart apache2
📂 Passo 2: Permitir o uso de arquivos .htaccess
Por questões de segurança, o Apache ignora as instruções de reescrita dentro de pastas (arquivos .htaccess) a menos que você dê permissão explícita.
- Edite o arquivo de configuração do seu site (geralmente em
/etc/apache2/sites-available/000-default.confou o arquivo do seu domínio):Bashsudo nano /etc/apache2/sites-available/000-default.conf - Dentro do bloco
<VirtualHost *:80>(ou 443), adicione ou altere o seguinte:Apache<Directory /var/www/html> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory>Dica: O segredo está noAllowOverride All. Sem isso, o Apache simplesmente ignora suas regras. - Reinicie o Apache novamente:
sudo systemctl restart apache2.
📝 Passo 3: Criando as Regras no .htaccess
Agora, vá até a pasta raiz do seu site (/var/www/html) e crie um arquivo chamado .htaccess. A estrutura básica segue este fluxo:
A Anatomia de uma Regra
Toda regra de reescrita geralmente segue este padrão:
- RewriteEngine On: Ativa o motor de reescrita.
- RewriteCond: (Opcional) Uma condição que deve ser atendida.
- RewriteRule: A ação propriamente dita.
🚀 Exemplos Práticos
1. Remover a extensão .php da URL
Para que o usuário acesse meusite.com/contato em vez de meusite.com/contato.php:
Apache
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^\.]+)$ $1.php [NC,L]
2. Forçar HTTPS (Segurança)
Redireciona todo o tráfego não seguro para a versão criptografada:
Apache
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
3. Redirecionar uma página antiga para uma nova
Apache
RewriteRule ^pagina-antiga$ /pagina-nova [R=301,L]
🚩 Entendendo as “Flags” (As letras entre colchetes)
As flags dizem ao Apache como tratar a regra:
| Flag | O que faz |
| [L] | Last: Para de processar outras regras se esta for atendida. |
| [R=301] | Redirect: Diz ao navegador (e ao Google) que a mudança é permanente. |
| [NC] | No Case: Ignora se as letras são maiúsculas ou minúsculas. |
| [QSA] | Query String Append: Mantém os parâmetros da URL (ex: ?id=123). |
🔍 Dica de Debug: “Por que não funciona?”
Se você receber um erro 500 Internal Server Error, 99% das vezes é um erro de digitação no .htaccess.
- Verifique os logs de erro para saber exatamente o que aconteceu:Bash
sudo tail -f /var/log/apache2/error.log
- Como usar o cmdlet Set-PSFLoggingProvider no PowerShell para aprimorar o monitoramento de logs.
- Como personalizar esquemas de cores no prompt de comando do Windows
- Descubra como implementar o altruísmo em um ambiente Windows.
- Como resolver o erro 0x8007f026 STATUS_WININET_LOAD_FAILED no Windows 10 e 11
- Como criar e gerenciar uma conta da Microsoft no Windows
