使用 .htaccess 设置 Web 服务器处理某些文件类型的 404 错误(ErrorDocument 404 + 重写规则)

2024-01-03

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

目标是设置自定义 ErrorDocument 404,处理不存在的错误选择的静态文件 like: /未找到.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 进行尝试,采用共享计划,两台服务器都有带有漂亮永久链接的 Wordpress,结果是相同的:

  1. 对于像这样的请求就像预期的那样工作http://mydomain.com/notfound.jpg http://mydomain.com/notfound.jpg

  2. 对于像这样的子目录中找不到文件不起作用http://mydomain.com/dir/notfound.jpg http://mydomain.com/dir/notfound.jpg。在这种情况下,WP 处理请求并显示 404 页面,我想避免某些文件类型出现这种情况,即静态文件,例如:css、js、jpg 等...

欢迎任何答案和评论,谢谢!我可以尝试您可能提出的任何建议(即使未经测试)。

EDIT 1:互相注释以使其正常工作(请参阅已接受的答案+下面的注释):

看来您必须(或取决于服务器配置)设置自定义错误 404 页面,否则排除某些选定文件类型的重写将不起作用,因此 WP 将处理该请求!(好像没有多少人注意到这一点,或者可能与服务器配置有关)

我意识到这一点,因为我什至在写这个问题之前就尝试了建议的解决方案,但没有“ErrorDocument 404”行,它不起作用。

EDIT 2:测试和另一个注意事项:

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

  2. 需要注意的非常重要的一点是,服务器通常应该针对丢失的文件返回 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 .htaccess 设置 Web 服务器处理某些文件类型的 404 错误(ErrorDocument 404 + 重写规则) 的相关文章

  • 非 www .htaccess 重定向 - 忽略其他子域

    我有一个 非 www 的 htaccess 重定向 如下所示 RewriteEngine on RewriteCond HTTP HOST www RewriteRule http www HTTP HOST 1 R 301 L 这是工作
  • mod_rewrite 将 '_' 替换为 '-'

    我几乎已经有了 mod rewrite 规则 但我已经屈服了 我需要重写 country countryname php to country countryname 但是 国家 地区名称 可能有这样的下划线 south africa ph
  • .htaccess 用问号“?”重写 URL仅适用于 1 个特定 URL

    几周前我已经开始了一个话题 但我现在遇到了一个与旧问题非常相似的新问题 htaccess 用问号 重写 URL https stackoverflow com questions 18543194 htaccess rewrite url
  • WordPress 子主题覆盖父主题包括

    我正在创建 WordPress 子主题 需要覆盖某些小部件模板 我正在尝试使用此方法来覆盖父主题调用 覆盖主题功能的正确方法 http www venutip com content right way override theme fun
  • WordPress 子文件夹安装重定向到根目录

    我遇到了一个奇怪的问题 我有我的主站点 mesopinions ca 它是一个 WordPress 安装 我还有几个子域 有自己的 WordPress 安装 无多站点 它与 concours mesopinions ca 子文件夹配合得很好
  • Wordpress - 通过检查用户状态从外部 bbPress 更改论坛角色

    我想检查用户状态并相应更新他们的 bbPress 论坛角色 不是 WordPress 角色 目的是向 BP Registration Options 插件添加功能 以调节用户注册 在 BuddyPress 中 目前 该插件在用户未经批准时将
  • 使用元表中的多个条目的 Compex MySQL 左连接

    我正在尝试创建一个查询来从主表 WordPress 用户表 和用户元表中获取信息 如果您不熟悉 WP DB 架构 wp users 保存基本用户信息及其 ID wp usermeta 保存 ID meta key 和 meta value
  • 无法在 Netbeans 9 中设置 apache tomcat

    我正在尝试在 Netbeans IDE 9 中设置 apache tomcat 我已尝试以下步骤 但无法设置 在 工具 gt 服务器 中 我单击 添加服务器 按钮 显示以下消息 因此 我尝试从 工具 gt 插件 安装插件 会显示一个对话框
  • 从 Laravel 的 URL 中删除 index.php

    我正在 Linux Mint 中使用 Laravel 5 5 12 我正在使用 LAMP 堆栈 我想删除index php来自网址 我的mod rewrite已启用阿帕奇模块 My htaccess文件位于public文件夹 它包含以下代码
  • AWS EC2 上的 Wordpress - 分配弹性 IP 后损坏

    所以 我安装了 WordPress 并且运行得很好 我可以通过从实例获得的公共 DNS 访问该站点和 wp admin 但是 一旦我创建了弹性 IP 并将其与实例关联 我就无法再访问 wp admin 并且主页样式表和 JavaScript
  • WooCommerce:在数据库中查找产品

    我正在使用 WooCommerce 创建一个网站 我想根据用户在主页搜索表单中输入的邮政编码来限制用户可用的产品 为了能够实现这一目标 我必须在 phpMyAdmin 的数据库中指定每个产品的条件 但我似乎找不到它 有谁知道 phpmyAd
  • 强制使用 .htaccess 下载文件

    所以我在 htaccess 中使用以下规则 AddType SCHM wsc
  • 隐藏产品价格和添加到购物车按钮,但不隐藏 WooCommerce 中未注册用户的变体

    在我的 WooCommerce 商店中 我想隐藏价格 直到客户登录为止 我有以下代码可以实现这一点 add action init hide price function hide price if is user logged in re
  • 无法与站点通信以检查致命错误

    无法与站点通信以检查致命错误 因此 PHP 更改已恢复 您需要通过其他方式上传 PHP 文件更改 例如使用 SFTP 有什么解决办法 我正在 WordPress 中编辑头文件 遇到这个问题 尝试这个 我有同样的问题并决定调查一下 更改 wp
  • 如何调试apache虚拟主机配置?

    我的 apache 虚拟主机配置再次出现问题 使用默认配置而不是我的特定配置 问题不在于配置错误 而在于如何解决它 有人有好的建议可以快速解决此类问题吗 更多信息 默认的conf文件是这样的 NameVirtualHost
  • 项目链接在 Wamp 服务器上不起作用

    我正在另一台计算机上安装 Wamp 服务器来运行中型数据库和 UI 我已成功阻止 IIS 并将服务器路由到 Localhost 8080 但是每当我尝试从 localhost 主页访问我的项目时 在 www 文件中 我被重定向到页面未找到错
  • Apache mod_rewrite 将子域重写到子文件夹(通过内部重定向)

    我正在尝试编写一组 mod rewrite 规则 允许我的用户利用单个文件夹在不同项目上进行开发 而不必为每个项目添加虚拟主机 我的想法是为每个需要此功能的用户 仅 3 4 个 设置一个 全局虚拟主机 该虚拟主机类似于 my domain
  • 并行读取 Flume spoolDir

    由于我不允许在产品服务器上设置 Flume 因此我必须下载日志 将它们放入 Flume spoolDir 中 并有一个接收器从通道中使用并写入 Cassandra 一切正常 但是 由于 spoolDir 中有很多日志文件 并且当前设置一次仅
  • mod_rewrite代理超时

    我有 apache 设置来代理对后端应用程序服务器的请求 有多个后端服务器 并且有一个大的 rewrite rules 文件 针对每个请求进行处理 以正确地将所有请求代理到应用程序服务器 一台特定的应用程序服务器有时需要很长时间才能响应 如
  • 如何将路径添加到 Apache PATH 变量?

    我在 apache2 的 custom conf 文件中设置了以下内容 SetEnv PATH PATH opt local lib mysql5 bin this is a test 但是它不起作用 当我打电话时 hey shell ex

随机推荐