使用.htaccess(ErrorDocument 404 +重写规则)为某些文件types设置Web服务器句柄404错误

这是我在这个伟大的社区的第一个问题(请告诉我,如果我做错了什么)。 在过去的5 – 6年里,我从你的答案中学到了很多东西,现在我有非常具体的问题,在互联网上找不到(这是可能的吗?)…

目标是设置自定义ErrorDocument 404,处理不存在select的静态文件,如: /notfound.jpg和子目录(对于任何目录):/ dir/notfound.jpg ,在WordPress下运行的网站启用漂亮的固定链接。 当一些select的静态文件丢失或连接不正确时,它将避免服务器的高负载!

我在.htaccess文件中使用W3 Totalcaching插件稍微修改过的代码:

ErrorDocument 404 /_code_404.html # BEGIN (modified) W3TC Skip 404 error handling by WordPress for static files <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} !(robots\.txt|sitemap\.xml(\.gz)?) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} \.(css|js|bmp|gif|ico|jpg|jpeg|jpe|png|swf)$ [NC] RewriteRule .* - [L] </IfModule> # END (modified) W3TC Skip 404 error handling by WordPress for static files # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress 

我试图用2个不同的服务器与Cpanel共享计划,都有Wordpress与漂亮的固定链接,结果是一样的:

  1. http://img.zgserver.com/wordpress/notfound.jpg这样的请求正常工作

  2. 没有find像这个http://img.zgserver.com/wordpress/notfound.jpg子目录中的文件的工作。 在这种情况下,WP处理请求,并显示404页面,我想避免某些文件types,即静态文件,如:CSS,JS,JPG和一些…

任何答案和意见,欢迎,谢谢! 我可以尝试你可能有的任何build议(甚至未经testing)。

编辑1:彼此试图让它工作的说明(请参阅接受的答案+下面的注释):

看来你必须(或依赖于服务器configuration)设置自定义错误404页面,否则排除某些选定的文件types的重写将不起作用,并因此WP将处理请求! (似乎没有多less人注意到这一点,或者它可能与服务器configuration有关)

我意识到,因为我甚至在我写这个问题之前尝试提出的解决scheme,但没有“ErrorDocument 404”行,并没有工作。

编辑2:testing和另一个说明:

  1. 在testing期间,我使用查询string:/12345.css?v=5和/dir4/12345.css?v=3&t=66testing了URL [它工作正常,因为REQUEST_URI排除了查询string!]

  2. 非常重要的是要注意的是,服务器通常应该返回HTTP代码404丢失的文件(否则search引擎可以伤害你的排名)。 如果您将完整的域名设置为:ErrorDocument 404 http://mydomain.com/_code_404.html,那么“客户端将不会收到原始的错误状态码,而是会收到redirect状态码”。 (参考 – httpd.apache.org/docs/2.0/mod/core.html#errordocument)

你可以试试这个:

 ErrorDocument 404 /_code_404.html <Ifmodulee mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} !(robots\.txt|sitemap\.xml(\.gz)?) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} \.(css|js|bmp|gif|ico|jpe?g|jpe|png|swf)$ [NC] RewriteRule .* - [L] RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </Ifmodulee>