Reescrita de .htaccess super simples para remover extensões de arquivo PHP e strings de consulta de URLs

O primeiro passo é criar um arquivo .htaccess, que deve conter o seguinte código e ser salvo na mesma pasta que você pretende salvar o arquivo index.php

RewriteEngine on

RewriteRule ^([a-zA-Z0-9]+|)/?$ index.php?name=$1
# Handle requests for "index.php"

Agora crie o arquivo index.php e insira o seguinte

<?php echo $_GET['name']; ?>

Agora é hora de testar

Você precisará executar algo como MAMP ou ter este código em seu servidor. Digite a primeira parte do URL para apontar o navegador da web para a pasta que contém os dois arquivos criados. Em seguida digite uma palavra após a barra, por exemplo

http://localhost:8888/rewrite/myname

Nota: aqui, meus arquivos foram salvos em uma pasta chamada rewrite (e eu estava usando o MAMP).

É muito bom ter posições fixas no URL em relação aos termos de consulta, mas às vezes queremos a flexibilidade adicional de aceitar também strings de consulta regulares, por exemplo

http://localhost:8888/rewrite/myname?age=39

Se tentássemos processar isso no momento, a string de consulta seria ignorada. Para impedir que isso aconteça, precisamos adicionar [QSA], que anexa qualquer string de consulta do URL da solicitação original a qualquer string de consulta criada no destino de reescrita.

RewriteRule ^([a-zA-Z0-9]+|)/?$ index.php?name=$1 [QSA]
# Handle requests for "index.php"

Agora substitua o código index.php pelo seguinte:

<?php 
if (isset($_GET['name'])) echo "Hello ".$_GET['name'].", ";
if (isset($_GET['age'])) echo "you look really young for ".$_GET['age'];
?>

Outra coisa útil de saber é que, se adicionarmos [NC] ao final da RewriteRule, ela não fará distinção entre maiúsculas e minúsculas:

RewriteEngine on

RewriteRule ^([a-z0-9]+|)/?$ index.php?name=$1 [QSA,NC]
# Handles requests for "index.php"

Para obter uma discussão mais aprofundada sobre sinalizadores de regra de reescrita (por exemplo, QSA, NC), consulte http://httpd.apache.org/docs/current/rewrite/flags.html

Discuto a reescrita mais detalhadamente aqui: http://sketchytech.blogspot.co.uk/2013/01/super-simple-htaccess-rewrite-to-create.html