如何跳过WordPress的404处理,并将静态文件的所有404错误重定向到404.html?

时间:2011-08-01 作者:freethinker

如何跳过wordpress的404处理,并将静态文件的所有404错误重定向到404。html?

我读过,使用permalinks时似乎不可能?

目标是通过不加载php来减少404错误的服务器负载。

7 个回复
最合适的回答,由SO网友:Chris_O 整理而成

。htaccess skip WordPress 404错误处理static files.

<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>
Note: 这些规则是由W3 Total Cache插件生成的*

Nginx跳过WordPress 404处理静态文件

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;
}

SO网友:bueltge

也许是一个简单的解决方案。使用条件标记is_404() 并创建指向静态文件的重定向;在文件中包含代码header.phpindex.php 主题的。

这里有一个例子。

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

SO网友:Matthew Xerri

扩展Chris\\u O所说的。。。。我将安装W3 Total Cache,并使用该插件中的设置来不缓存静态文件。该插件本身非常有用,是加速站点的必要条件,尤其是在最新更新的情况下。

我也建议你看看Creating an Error 404 Page 从Wordpress了解如何处理静态文件404、403(禁止)等。这是一个很好的阅读。

SO网友:mfields

我不确定这是否可行。如果您查看WordPress在启用permalinks时创建的htaccess代码,它基本上会说:“如果找不到文件/目录,请将其发送到index.php。”这包括所有实际的404请求。除了创建WordPress知道的每个动态生成的公共资源的列表并直接将其插入之外。htaccess,您需要加载php来处理404。

SO网友:Anonymous

我喜欢Chris\\u O的想法,但我制作了自己的版本,这样更安全。

所以,我所做的只是将文件夹添加到异常中,所以如果您的请求是从这些行开始的,那么它肯定不是有效的永久链接。大多数请求来自试图检查这些文件夹内容是否存在漏洞的机器人程序。它们将被有效过滤,如果需要,您可以显示一些小的静态404页面。

其他请求仍将由wordpress处理,如果有人输入了错误的地址,它将在模板中显示一条用户友好的未找到消息。Chris\\u O的解决方案只适用于看起来像文件扩展名的请求,否则它们也将由wordpress处理。

为了使其更加可靠,您可以检索原始访问文件并搜索404错误。如果您注意到许多以特定行开头的请求,您还可以将它们包括在此筛选器中:

#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>

SO网友:crisc2000

我在我的网站上安装了多个CMS,所以我使用类似这样的方式对所有CMS使用相同的404错误页面。我对Nginx+FastCgi使用此配置,它工作正常:

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;
    }
}
在php中,我将此配置与此一起使用。ini:

cgi.fix_pathinfo = 1 
wordpress是这样安装的http://example.com/wordpress/ . 404。html位于http://example.com/ .

另外,不要忘记,在对PHP进行更改后,需要重新启动PHP和Nginx服务。ini或nginx。更改生效的conf文件。

SO网友:Mazhar

有三种方法可以做到这一点

通过更改404。php代码完成教程-(链接已断开并重定向到垃圾邮件)

结束

相关推荐

如何在Mac上制作htaccess文件?

我正在尝试为我的网站设置一些永久链接。WordPress警告我的htaccess文件不可写。它提供了一些代码来复制并放入htaccess文件。我在Mac电脑上,我的本地机器运行WordPress 3.1.1。我处理了WP提供的代码,并将其粘贴到一个新的文本编辑文件中,我将其命名为1。htaccess。我把文件放在根目录Sites/mysite/中。然后我尝试重新命名文件并删除“1”,但我的Mac电脑发出警告,文件以“.”开头是系统文件,不允许我重新命名。如何在Mac上创建htaccess文件?非常感谢。-