Como pulo a manipulação 404 do wordpress e redireciono todos os erros 404 dos arquivos estáticos para 404.html?

17

Como pulo a manipulação 404 do wordpress e redireciono todos os erros 404 dos 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, não carregando o php.

pensador livre
fonte

Respostas:

8

.htaccess pula a manipulação 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: Essas regras foram geradas pelo plug-in W3 Total Cache *

O Nginx pula a manipulação 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;
}
Chris_O
fonte
1

Para estender o que Chris_O disse ... Eu instalaria o W3 Total Cache e usaria as configurações desse plug-in para não armazenar arquivos estáticos. O plugin em si é muito útil e necessário 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.

Matthew Xerri
fonte
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.phpou index.phpno tema.

Aqui está um exemplo.

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

Ligações

bueltge
fonte
2
a tomada de decisão ainda é feita em PHP aqui e não no nível htaccess. O objetivo é ignorar completamente o carregamento do PHP para erros 404.
livre-pensador
2
@ freethinker: certo, apenas via php; a maneira como via htaccess é mais rápido, mas talvez não tão fácil manuseio em WordPress
bueltge
@kaiser oops, atualizei a questão
livre-pensador
0

Não tenho certeza de que isso seja possível. Se você observar o código htaccess que o WordPress cria ao ativar os links permanentes, ele basicamente diz: "Se o arquivo / diretório não puder ser encontrado, envie-o para index.php." Isso inclui todas as solicitações 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 lidar com os 404.

mfields
fonte
0

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

Então, o que eu fiz, acabei de adicionar pastas à exceção, portanto, se seus pedidos começarem com essas 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 quanto a explorações. Eles serão efetivamente filtrados e, se necessário, você poderá exibir uma pequena página 404 estática.

Outros pedidos ainda serão atendidos pelo wordpress e, se alguém digitar um endereço errado, ele exibirá uma mensagem amigável não encontrada no seu modelo. A solução do Chris_O funcionará apenas para solicitações que se parecem com 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 erros 404. Se você perceber 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>
Anônimo
fonte
0

Eu tenho múltiplos CMS instalados no meu site, então uso algo assim para usar a mesma página de erro 404 para todos os CMS. 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 assim http://example.com/wordpress/ . o 404.html está localizado na raiz do http://example.com/ .

PS Não esqueça que os serviços PHP e Nginx precisam ser reiniciados após fazer alterações nos arquivos php.ini ou nginx.conf para que as alterações entrem em vigor.

eliz82
fonte
-3

Existem 3 maneiras de fazer isso

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

Tutorial completo - (link morto e redirecionado para spam)

Mazhar
fonte
Oi Mazhar, você poderia postar uma resposta completa, em vez de apenas um link para o seu site. Se esse link acabar, essa resposta será praticamente inútil! Felicidades!
Stephen Harris
Esta página fornece um 404. Irônico. Ou você está tentando dizer alguma coisa?
Michiel van der Blonk