Como faço para pular o tratamento 404 do wordpress e redirecionar todos os erros 404 para arquivos estáticos para 404.html?

15

Como faço para pular o tratamento 404 do wordpress e redirecionar todos os erros 404 para arquivos estáticos para 404.html?

Eu li e parece que não é possível ao usar permalinks?

O objetivo é reduzir a carga do servidor para erros 404 ao não carregar o php.

    
por freethinker 01.08.2011 / 15:09

7 respostas

8

.htaccess pule o tratamento de erros do WordPress 404 para arquivos estáticos .

<IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_URI} !(robots\.txt|sitemap\.xml(\.gz)?)
        RewriteCond %{REQUEST_FILENAME} \.(css|js|html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|swf|tar|tif|tiff|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$ [NC]
        RewriteRule .* - [L]
    </IfModule>

Nota: Estas regras foram geradas pelo plugin W3 Total Cache *

Nginx ignora o tratamento do WordPress 404 para arquivos estáticos.

if (-f $request_filename) {
    break;
}
if (-d $request_filename) {
    break;
}
if ($request_uri ~ "(robots\.txt|sitemap\.xml(\.gz)?)") {
    break;
}
if ($request_uri ~* \.(css|js|html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml|asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|swf|tar|tif|tiff|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$) {
    return 404;
}
    
por Chris_O 01.08.2011 / 20:13
1

Para estender o que o Chris_O disse .... Eu instalaria o W3 Total Cache e usaria as configurações desse plugin para não armazenar em cache os arquivos estáticos. O plugin em si é muito útil e uma obrigação para acelerar o seu site, especialmente com a atualização mais recente.

Também recomendo que você dê uma olhada em Criando uma página de erro 404 do Wordpress para ver como lidar com 404 para arquivos estáticos, 403 (proibido), etc. É uma boa leitura.

    
por Matthew Xerri 02.09.2011 / 13:14
1

Talvez uma solução simples. Use a tag condicional is_404() e crie um redirecionamento para seu arquivo estático; inclua o código no arquivo header.php ou index.php do tema.

Aqui um exemplo.

   if ( is_404() ) {
      wp_redirect( 'static.htm' );
      exit;
   }

Links

por bueltge 01.08.2011 / 19:24
0

Não tenho certeza se isso é possível. Se você olhar o código de htaccess que o WordPress cria quando você habilita permalinks, ele basicamente diz: "Se o arquivo / diretório não puder ser encontrado, envie-o para index.php." Isso inclui todos os pedidos 404 reais. Além de criar uma lista de todos os recursos públicos gerados dinamicamente que o WordPress conhece e inseri-los diretamente no .htaccess, você precisará carregar o php para manipular os 404s.

    
por mfields 01.08.2011 / 19:37
0

Gostei da ideia de Chris_O , mas fiz a minha própria versão, que é mais segura.

Então, o que eu fiz, acabei de adicionar pastas à exceção, portanto, se suas solicitações começarem a partir dessas linhas, definitivamente não é um link permanente válido. A maioria das solicitações é proveniente de bots que estão tentando verificar o conteúdo dessas pastas para explorações. Eles serão efetivamente filtrados e, se necessário, você poderá exibir uma pequena página 404 estática.

Outras solicitações ainda serão tratadas pelo wordpress e, se alguém inserir um endereço incorreto, exibirá uma mensagem não encontrada pelo usuário em seu modelo. A solução de Chris_O funcionará apenas para solicitações semelhantes a extensões de arquivo, caso contrário, elas também serão tratadas pelo wordpress.

Para torná-lo ainda mais confiável, você pode recuperar seu arquivo de acesso bruto e procurar por erros 404. Se você observar muitas solicitações que começam com linhas específicas, também poderá incluí-las neste filtro:

#adding your own handler
ErrorDocument 404 /404/index.html

<IfModule mod_rewrite.c>
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_URI} !^/(404|cgi-bin|wp-admin|wp-content|wp-includes)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
    
por Anonymous 13.06.2016 / 02:01
0

Eu tenho múltiplos CMS instalados no meu site, então eu uso algo assim para usar a mesma página de erro 404 para todos os CMSs. Eu uso este conf para Nginx + FastCgi e está funcionando bem:

server {
    ...
    error_page 404 /404.html; #enable custom 404 error page
    location ~ /\.ht {
        deny all; #disable access to htaccess
    }
    location ~ [^/]\.php(/|$) {
        fastcgi_pass  127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_intercept_errors on; #disable PHP 404 error intercept
    }
    location /wordpress/ {
        try_files $uri $uri/ /wordpress/index.php?$args;
    }
}

Eu uso essa configuração junto com isso no php.ini:

cgi.fix_pathinfo = 1 

o wordpress é instalado como este enlace . o 404.html está localizado na raiz do enlace .

P.S. Não se esqueça de que os serviços PHP e Nginx precisam ser reiniciados depois de fazer alterações nos arquivos php.ini ou nginx.conf para que as mudanças entrem em vigor.

    
por eliz82 10.04.2018 / 18:45
-3

Existem 3 maneiras de fazer isso

  1. Alterando seu código 404.php.
  2. Usando plugins do wordpress.
  3. Editando seu arquivo .htaccess.

Tutorial completo - (link morto e redirecionado para spam)

    
por Mazhar 05.08.2012 / 12:26