Answers:
<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>
注意:这些规则是由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;
}
也许是一个简单的解决方案。使用条件标签is_404()
并创建到您的静态文件的重定向;在文件header.php
或index.php
主题中包含代码。
这里举个例子。
if ( is_404() ) {
wp_redirect( 'static.htm' );
exit;
}
链接
我喜欢Chris_O的想法,但是我制作了自己的版本,这更安全。
所以我做了,我只是将文件夹添加到例外中,因此,如果您的请求从这些行开始-绝对不是有效的永久链接。大多数请求来自试图检查这些文件夹内容以进行攻击的漫游器。它们将被有效过滤,如果需要,您可以显示一些小的静态404页面。
其他请求仍将由wordpress处理,如果有人输入了错误的地址,它将在模板中显示一条用户友好的未找到消息。Chris_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>
我的网站上安装了多个CMS,因此我使用类似的方法对所有CMS使用相同的404错误页面。我将这个conf用于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
像这样http://example.com/wordpress/安装了wordpress 。404.html位于http://example.com/的根目录中。
PS不要忘记对php.ini或nginx.conf文件进行更改后,需要重新启动PHP和Nginx服务,以使更改生效。
共有3种方式
完整的教程-(链接无效,并重定向到垃圾邮件)