• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

softklin

[htaccess] Erro 404 sem redirecionar

11 mensagens neste tópico

Amigos, precisava de uma ajudinha muito simples em mod_rewrite.

Estou a fazer URI's limpos, mas esta parte já está concluída. O que eu queria era que alguém escrevesse um caminho que não existe, fosse para uma página de erro personalizada, mas sem alterar o URL errado, por exemplo:

/este/directorio/nao/existe

pretendo redirecionar para /404/, mas no browser deve-se manter visível /este/directorio/nao/existe (ou seja, apenas um redireccionamento interno).

Alguém me sabe ajudar nisto?

EDIT: visto que estou a trabalhar com directórios "ficticios", acho que as opções -f e -d não me irão ajudar muito...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado tirácio pela resposta. No entanto ao colocar no htaccess

ErrorDocument 404 /404/

ele redirecciona para o /404/. O que pretendia era manter o url que não existe na barra de endereços, mas apresentando a página de erro.

Cumps.

---

Em adição ao que disse, queria fazer isto com htaccess, visto que não tenho possibilidade de mexer no servidor

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu acabei de testar isso no meu servidor (com o ErrorDocument) e ele redirecciona-me internamente, o URL fica o mesmo...

Tenta esta hipótese:

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule (.*) /404.php [L]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado Nazgulled pela dica.

Porém, isto ficou um bocado baralhado, mas deve ser culpa minha, porque já tinha outros conteúdos no meu htacces... acho útil colocá-los aqui:

RewriteEngine On

# clean uri
RewriteRule ^([a-zA-Z0-9]+)/$ /$1 [R]
RewriteRule ^([a-zA-Z0-9]+)$ /index.php?page=$1

# paginas 404
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /404/ [L]

Acho que o 1º conjunto de regras está atrofiar com o 2º conjunto que me deste (que faz todo o sentido, e funciona sozinho).

A minha intenção com o primeiro conjunto de regras é:

1ª linha, se um endereço for /contactos/, ele passa a ser /contactos

2ª linha, o ficheiro php "apanha" o nome fictício da pasta, e abre o ficheiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta trocar os grupos de condições... E já agora, tu na primeira regra estás basicamente a tirar uma / final? Isso não é necessário, ou então não te explicaste bem...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Precisas de usar o L nas flags da regra dos clean URLs.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nazgulled, suponho que trocar, seja por o grupo de regras not found por cima das de redirecionamento para o PHP; com essa solução, dá-me o internal server error 500.

Battousai, estava habituado a fazer assim, com as duas condições, mas no que se puder reduzir, óptimo :D

Tirácio, é precisamente isso :D funciona perfeitamente! Ficou assim:

RewriteEngine On

# clean uri
RewriteRule ^([a-zA-Z0-9]+)([/]?)$ /index.php?page=$1 [L]

# paginas 404
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) /404/ [L]

Obrigado aos três!! :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora