- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我希望将丢失文件和无效目录的请求重定向到自定义 404 错误页面。我相信这可以使用 2 种方法来完成。
# redirect invalid requests and missing files to the not-found page
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://www.example.com/not-found.html [L]
# same idea but using error document
ErrorDocument 404 /not-found.html
一种选择比另一种更好吗?我什么时候想使用一个与另一个?
最佳答案
重写规则不会返回正确的状态代码。这意味着浏览器将看到您的自定义错误页面,但响应代码仍将是 200,并且浏览器(或任何与服务器通信的客户端)会认为特定的错误请求实际上是一个好请求要求。
ErrorDocument
语句将显示自定义错误页面,但也会返回一个 404 响应代码,让浏览器(或任何客户端)知道它请求的不是在服务器上找到。
请注意,mod_rewrite 有一个 R
标志,您可以将响应代码提供给:
RewriteRule ^(.*)$ /not-found.html [L,R=404]
这将返回一个 404 响应代码,但它不会显示 /not-found.html
页面。如果您使用 ErrorDocument
语句,它将显示自定义错误文档:
RewriteRule ^(.*)$ - [L,R=404]
ErrorDocument 404 /not-found.html
重写规则将强制 404,它的目标基本上被忽略,然后 ErrorDocument
确保提供自定义错误页面以及正确的 404 响应.
所以您几乎总是需要 ErrorDocument
。另一件需要注意的事情是,mod_rewrite 在 URI 到文件映射管道中的位置与 ErrorDocument
不同。如果您依靠 mod_rewrite 来确定什么应该是 404 什么不应该,它很可能会受到之后可能出现的其他模块的影响(例如 mod_proxy)。
明确地说,ErrorDocument
在 URL 到文件映射管道以“找不到资源”(即 404),然后自定义错误文档语句 ErrorDoucment 404
提供自定义错误页面而不是默认错误页面。当您像在问题中那样使用 mod_rewrite 时,它完全绕过了管道到达 404 的自然方式。
关于.htaccess - ErrorDocument 与 RewriteRule,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15792356/
我有一个带有多个虚拟主机的服务器。现在我想为整个服务器设置错误文档。我在 /var/www/error/* 中找到了我的错误站点,但使用 ErrorDocument指令我只能设置相对于文档根目录的错误
所以我有一个带有子目录的子域的apache服务器。我把我的目录变成子域。所以,而不是 example.site.com/mycoolsite它是 mycoolsite.example.com .或者换
有没有办法让您的PerlAuthenHandler,PerlAuthzHandler甚至您的PerlHandler更改请求的错误文档? 示例:当用户转到特定页面并收到错误消息时,我想让一个子例程选择将
我正在尝试对域及其所有子域使用相同的 404 ErrorDocument,子域在/var/www/路径中都有自己的目录 Apache ErrorDocument 指令需要一个相对路径(相对于当前目录)
在 Apache 中是否有这样的可能......(即重定向到一个外部 url,其路径导致 403 错误传递) ErrorDocument 403 http://www.sample.com/{{RED
我在子文件夹中有一个 htaccess 文件,如下所示: /subfolder/.htaccess 在 htaccess 文件中的以下代码设置一个 404 ErrorDocument ErrorDoc
请告诉我为什么这不起作用。它正在工作,但莫名其妙地决定停止工作。 在 php 中,如果找不到这样的页面,我会发出 404。 if(checkPageExists($escaped_url_page_n
我的 .htaccess 文件中有一堆 ErrorDocument 指令,以便捕获 Apache 可能向用户抛出的几乎所有可能的错误,并将所述用户重定向到我的错误 Controller ,然后将错误呈
我有一个 .htaccess 文件,如下所示: AddDefaultCharset utf-8 AddCharset utf-8 .html Order Allow,Deny ErrorDocumen
我有一个文件 index.php ,并在同一级别 .htaccess使用此代码: ErrorDocument 404 index.php 当我生成未找到错误时,会打印一个带有文件名的页面,因此,在这种
我希望将丢失文件和无效目录的请求重定向到自定义 404 错误页面。我相信这可以使用 2 种方法来完成。 # redirect invalid requests and missing files to
任何人都可以请指教吗?我希望我的网站访问者的默认页面是 index.php,对于所有不存在的页面,访问者应该看到 errordoc.php 所以我把它放在 .htaccess 中: ErrorDocu
我有一个来自 AWS EC2 服务的服务器,在 Linux ubuntu 上运行,并且我已经安装了 apache、php 和 mysql。 我已在文档根 /var/www/html 中添加了一个 .h
是否有类似通配符指令的东西可以捕获所有可能的错误并在单个自定义错误页面中处理它们? ErrorDocument 404 /error.php?code=404 ErrorDocument 403 /e
发生错误时,我正在尝试转移到另一台主机。我有这个,并且有效: ServerName test.com. ServerAlias test.com ProxyPreserveH
我想在我的项目中有一个自定义的 403 页面。所以我在 .htaccess 文件中添加了这些代码: Order deny,allow Deny from all Allow from 192.168.
我有多个ErrorDocuments在我的 .htaccess 文件中设置错误,例如 404、401、403 等,这些错误都重定向到我的错误页面,但 ErrorDocument当 PHP 报告 500
我基本上想要做的是将任何 404 请求重定向到 /404/但后来我想让它“拉”页面到 index.php?error=404 ,同时将 URL 保留为 /404/ - 然后我可以使用 PHP (使用
我的网站结构如下: - pages 404.php 403.php - app /css /-script index.php .htaccess 在我
我知道这可能是重复的,但我有更好的细节。我将 .htaccess 文件设置为显示最常见错误的自定义错误页面: # remove .php RewriteEngine On Rewr
我是一名优秀的程序员,十分优秀!