Pergunta

Eu quero levar pedidos de arquivos ausentes em uma pasta específica e redirecioná-los para program.php nessa pasta.

Este é um programa que vai usar um monte de lugares diferentes, e eu preferiria evitar especificando o nome da pasta no arquivo .htaccess.

Eu tentei apenas colocar:

errordocument 404 program.php

mas o resultado é que o navegador apenas imprime "program.php" e não executa program.php.

Eu entendo por isso está acontecendo: com base na documentação em http://httpd.apache.org/docs/2.0/mod/core.html , de URL que não começar com uma barra ou http são interpretadas como uma mensagem de texto.

A questão é como contornar esta limitação para ser capaz de acessar a mesma pasta.

Foi útil?

Solução

Acabei usando RewriteRule vez de ErrorDocument :

rewriteengine on
rewritecond %{request_filename} !-f
rewriterule ^(.+).jpg$ program.php?i=$1.jpg [L]

A segunda verifica linha que o arquivo não existe, de modo que as imagens existentes serão mostradas corretamente.

Outras dicas

Você quer:

ErrorDocument 404 /program.php

De acordo com a docs , "URLs pode começar com uma barra (/) para web-caminhos locais (em relação ao DocumentRoot) ".

Você já tentou um caminho (relativo ou absoluto)? Se você faz relativo, ele deve ser a raiz da web, que servidor pode o seu propósito.

ErrorDocument 404 /program.php

Se você tiver apenas um pequeno número de pastas, você provavelmente pode usar:

<Directory /path/a>
   ErrorDocument 404 /a/program.php
</Directory>
<Directory /path/b>
   ErrorDocument 404 /b/program.php
</Directory> 
<Directory /path/c>
   ErrorDocument 404 /c/program.php
</Directory>

Se isso é impraticável, então você deve ter apenas um program.php na raiz e tê-lo reagir de maneira diferente dependendo do conteúdo da variável de ambiente REDIRECT_URL, que é de US $ _SERVER [ 'REDIRECT_URL'] em PHP.

Por que não ter uma alça ErrorDocument todos os erros em todas as pastas? Poderia ser muito mais limpo dessa forma. Você poderia, então, lidar com o caso individual usando $ _SERVER [ "REQUEST_URI"] que deve conter o pedido original, se bem me lembro.

Como sobre isso. Em seu caminho de raiz, você configurar um arquivo error.php genérico. No entanto, tudo que faz é analisar o REQUEST_URI, verificar o caminho, ver se há uma error.php costume lá, e incluir isso. Poderia trabalhar, né?

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