草庐IT

.htaccess - ErrorDocument 与 RewriteRule

coder 2024-02-27 原文

我希望将丢失文件和无效目录的请求重定向到自定义 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/

有关.htaccess - ErrorDocument 与 RewriteRule的更多相关文章

  1. ruby-on-rails - 在 rails 上使用 htaccess 密码保护? - 2

    我希望使用.htaccess密码文件保护我的Rails应用程序上的/admin路由-这可能吗? 最佳答案 Rails有一个内置的助手,你可以把它放在你的应用程序Controller中:protecteddefauthenticateauthenticate_or_request_with_http_basicdo|username,password|username=="admin"&&password=="test"endend然后在您想要保护的任何Controller上使用before_filter(或者只是将其粘贴在应用程序C

  2. javascript - .htaccess 用于 SEO 机器人在没有 hashbang 的情况下抓取单页应用程序 - 2

    使用pushState启用页面,通常您使用escaped_fragment重定向SEO机器人惯例。您可以阅读更多有关here的信息.约定假定您将在单页应用程序的所有URI之前使用(#!)hashbang前缀。SEO机器人将通过用它自己可识别的约定替换hashbang来逃避这些片段escaped_fragment进行页面请求时。//Yourpagehttp://example.com/#!home//Requestedbybotsashttp://example.com/?_escaped_fragment=home这允许网站管理员检测机器人,并将它们重定向到缓存的预呈现页面。Rewri

  3. .htaccess - 没有 Nginx 或 Apache 的 Golang htaccess 配置 - 2

    我创建了webapp并用Googlesiteanalyzer进行分析.在大多数情况下,我需要配置htaccess文件。据我了解,此文件只能在Nginx或Apache服务器上使用,但我不想使用其中任何一个。我只想使用golang工具配置htaccess。目前我的应用程序在VPS服务器上运行。 最佳答案 此项目允许您使用GO、零apache代码支持http身份验证标准。您甚至可以使用通过Apachehtpasswd(坏)或htdigest(好)命令创建的密码文件:https://github.com/abbot/go-http-auth

  4. 使用 Go 的 OpenStack 的 .htaccess 文件位置 - 2

    我正在使用OpenShift,我想知道Go语言(golang)的.htaccess文件应该放在哪里。我用其他语言尝试了所有位置,但都没有用。编辑:是的,我用Go语言cartridge创建了一个1smallgear应用。一切都是默认的,所以它是TheGoCartridge 最佳答案 我猜你正在使用Gocartridge;据我所知,.htaccess文件应该在网络服务器上。您的Web服务器应该在主要设备上运行,但如果没有任何其他信息,很难提供有意义的答案。 关于使用Go的OpenStack的

  5. .htaccess - Heroku htaccess 基本身份验证上的 Golang 应用程序 - 2

    是否可以在heroku中运行的golang应用程序上使用htaccess?我读过这个link但该解决方案对我不起作用(另外,命令htpasswd在herokubash中无法识别,但我使用thistool创建了htpasswd文件)。谢谢。 最佳答案 Goweb应用程序是一个服务器,因此无需使用Apachehttpd服务器,尤其是在具有非常清晰的Go部署说明的Heroku上:https://devcenter.heroku.com/categories/go仔细遵循这些说明,您会发现不需要Apache。htaccess和htpassw

  6. windows - RewriteRule 根本不在 .htaccess for Windows (Apache) 中写入 - 2

    问题我正在使用tutorial学习使用Zend框架。我无法通过“确保.htaccess正常工作”部分。我知道有很多关于Windows的问题,我会提到我所做的,以便我们可以在同一页面上。.htaccess的内容如下:RewriteEngineOn#ThefollowingruletellsApachethatiftherequestedfilename#exists,simplyserveit.RewriteCond%{REQUEST_FILENAME}-s[OR]RewriteCond%{REQUEST_FILENAME}-l[OR]RewriteCond%{REQUEST_FILEN

  7. windows - 如何使用 Windows 搜索 .htaccess 文件? - 2

    我正在处理大量文件,需要找到一个.htaccess文件来重定向我网站中的单个页面。我知道这听起来有多可笑:为什么不检查页面所在的目录呢?但问题比这稍微复杂一些。不过,我所需要的只是搜索web文件夹下的每个.htaccess文件。尝试正常搜索不允许我选择要搜索的文件类型,并且搜索隐藏文件只是(谁知道为什么)忽略了.htaccess文件。我无法下载任何新软件来为我执行此操作。但是——一定有办法!即使我能以某种方式列出目录(及其子目录)中的每个文件,然后按文件类型组织并向下滚动?我可以用“RewriteEngine”这个词搜索任何文件,但是文件太多了,这会花很长时间。有什么想法吗?谢谢!=/

  8. java - 覆盖服务器上的 .htaccess 文件 - 2

    我的.htaccess文件包含url映射,我的脚本每天创建一次这些条目。由于.htaccess是服务器上的隐藏文件,当脚本试图覆盖此.htaccess文件时,我得到错误消息AccessDenied。有没有办法覆盖文件。 最佳答案 我怀疑这里的问题是你在Windows上,而Windows并不特别喜欢以点开头的文件名(它认为你正在创建一个带有空“名称”和“htaccess”的文件“扩展名)。最快的解决方案可能只是将Apache正在查找的文件的名称更改为例如htaccess.txt使用AccessFileNamedirective.

  9. windows - Zend : . htaccess 现在不能在 Windows 上运行如何继续我的项目? - 2

    我在中期开始从事一个项目。我们在Ubuntu上使用ZendFramework、PHP、MySql、Ajax、jQuery和jSon。它在ubuntu上工作。现在我切换到Windows。我在Windows上为我的项目安装了Wamp、Eclipse并创建了一个主机(test.dev)。但是当通过test.dev启动项目时。它在浏览器窗口上给我以下错误:InternalServerErrorTheserverencounteredaninternalerrorormisconfigurationandwasunabletocompleteyourrequest.Pleasecontactth

  10. windows - 使用 .htaccess 从 URL 中删除特殊字符 - 2

    我正在尝试在我的网站上使用example.com/@lorem-ipsum-dolor而不是example.com/tag/lorem-ipsum-dolor表格。它在我的本地和远程服务器上工作,但如果urls包含":\*|等字符,它在本地服务器(WinXP)上不工作。有什么解决办法吗?如果没有,那么我想我需要从本地服务器上的url中删除这些字符。我用谷歌搜索了很多次,但没有正确的结果。有什么想法吗? 最佳答案 这些字符不允许出现在URL中。这真的很重要:您的URL将无法通过验证并可能导致技术问题,因为像@和:这样的字符在有效URL

随机推荐