这是我在这个很棒的社区中的第一个问题(请告诉我我做错了什么)。在过去的5-6年中,我从您的回答中学到了很多东西,现在我有一个非常具体的问题,我在Internet上找不到(这可能吗?)...
目标是设置自定义ErrorDocument 404,以处理不存在的选定静态文件,例如:/notfound.jpg以及在子目录(对于任何目录):/ dir/notfound.jpg中,用于在启用了漂亮永久链接的Wordpress下运行的网站。当某些选定的静态文件丢失或链接不正确时,它将避免服务器上的高负载!
我在.htaccess文件中使用了W3 Total缓存插件中经过稍微修改的代码:
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
我正在使用Cpanel的2台不同服务器上,在共享计划上进行尝试,它们都具有具有永久链接的Wordpress,结果是相同的:
可以像http://mydomain.com/notfound.jpg之类的请求一样正常工作
对于像http://mydomain.com/dir/notfound.jpg这样的子目录中的未找到文件不起作用。在这种情况下,WP处理请求并显示404页面,对于某些文件类型,例如对于静态文件,例如css,js,jpg和其他一些文件,我想避免这样做。
欢迎任何答案和评论,谢谢!我可以尝试您可能有的任何建议(甚至未经测试)。
编辑1:互相注意以尝试使其正常工作(请参见已接受的答案和下面的注释):
看来您必须(或取决于服务器配置)设置自定义错误404页面,否则排除某些选定文件类型的重写将无法进行,因此WP将处理该请求!(似乎没有多少人注意到这一点,否则可能与服务器配置有关)
我意识到了这一点,因为即使在我写这个问题之前,我都在尝试提出的解决方案,但是没有“ ErrorDocument 404”这一行,所以它不起作用。
编辑2:测试和另一个注意事项:
在测试期间,我测试了带有查询字符串的URL:/12345.css?v=5和/dir4/12345.css?v=3&t=66 [效果很好,因为REQUEST_URI排除了查询字符串!]
需要注意的非常重要的一点是,服务器通常应针对丢失的文件返回HTTP代码404(否则搜索引擎可能会损害您的排名)。如果您在以下位置设置完整域名:ErrorDocument 404 http://mydomain.com/_code_404.html,则“客户端将不会收到原始错误状态代码,而是会收到重定向状态代码”。(参考-httpd.apache.org/docs/2.0/mod/core.html#errordocument)
你可以试试这个吗?
ErrorDocument 404 /_code_404.html
<IfModule 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]
</IfModule>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句