É possível usar .htaccess para enviar URLs de seis dígitos para um script, mas tratar todos os outros URLs inválidos como 404s?

StackOverflow https://stackoverflow.com/questions/73123

  •  09-06-2019
  •  | 
  •  

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.

Foi útil?

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!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top