É possível usar .htaccess para enviar URLs de seis dígitos para um script, mas tratar todos os outros URLs inválidos como 404s?
Pergunta
É possível usar .htaccess para processar todos os URLs de seis dígitos, enviando-os para um script, mas tratar todos os outros URLs inválidos como um erro 404?
Por exemplo:
http://mywebsite.com/132483
seria enviado para:
http://mywebsite.com/scriptname.php?no=132483
mas
http://mywebsite.com/132483a or
http://mywebsite.com/asdf
seria tratado como um erro 404.
Atualmente, tenho isso funcionando por meio de um script PHP 404 personalizado, mas é meio confuso.Parece-me que .htaccess pode ser uma solução mais elegante, mas não consegui descobrir se é possível.
Solução
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^([0-9]{6})$ scriptname.php?no=$1 [L]
</IfModule>
Para preservar o URL limpo
http://mywebsite.com/132483
ao servir scriptname.php use apenas [L].Usar [R=301] irá redirecioná-lo para seu scriptname.php?no=xxx
Você pode achar isso útil http://www.addedbytes.com/download/mod_rewrite-cheat-sheet-v2/pdf/
Outras dicas
No seu arquivo htaccess, coloque o seguinte
RewriteEngine On
RewriteRule ^([0-9]{6})$ /scriptname.php?no=$1 [L]
A primeira linha ativa o mecanismo mod_rewrite.Os colchetes () colocam o conteúdo em $1 - sucessivos () preencheriam $2, $3...e assim por diante.O [0-9]{6} diz para procurar uma string com exatamente 6 caracteres contendo apenas caracteres de 0 a 9.
O [L] no final torna esta a última regra - se for aplicável, o processamento da regra será interrompido.
Ah, ^ e $ marcam o início e o fim do uri de entrada.
Espero que ajude!
Sim, é possível com mod_rewrite.Existem muitos bons tutoriais de mod_rewrite online. Uma pesquisa rápida no Google deve resultar em sua resposta rapidamente.
Basicamente, o que você vai querer fazer é garantir que a expressão regular usada esteja apenas procurando dígitos e nenhum outro caractere e garantir que o comprimento seja 6.Então você redirecionará para scriptname.?no= com o número que você capturou.
Espero que isto ajude!