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.
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.
Respostas:
<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 *
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;
}
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.
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
no tema.
Aqui está um exemplo.
if ( is_404() ) {
wp_redirect( 'static.htm' );
exit;
}
Ligações
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.
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>
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.
Existem 3 maneiras de fazer isso
Tutorial completo - (link morto e redirecionado para spam)