告诉Apache将LF转换为CRLF文本/纯文本

问题:我想从编码LF文件提供CRLF

我有一个基于apache2的httpd基于linux的networking服务器configuration为提供(大)日志文件( *.log )由基于Linux的模拟器生成。

这些日志文件具有Unix风格的LF结尾,而不是Windows风格的CRLFCRLF也被certificate是http协议中文本文件的标准。

当我在Windows中使用浏览器查看它们时,它们将被加载到Notepad.exe中,并且所有文本都在同一行上(不正确) 除非我将服务器上的日志从*.log重命名为*.txt

它似乎是微软Windows可能特别处理*.txt ,并转换结束,因为他们到达。

鉴于这些线索,如何更改设置,以便客户端用户正确查看文件,而不pipe他们的平台/浏览器如何。


更多的问题细节:为什么我不能做明显的事情

分析日志,我发现.txt作为MIMEtypestext/plain.log作为text/x-log ,但使用SetType.log切换到text/plain并不能解决问题。

在生产系统中,我不会轻易地将文件更改为以.txt结尾。

日志太多,我想要转换使用(例如unix2dos ),并保存另一个副本大。 此外,这将迫使我pipe理转换文件的额外caching,这将需要失效,清理等,或更改原始文件,这可能会打破其他系统,使用它们。

  1. 是否有一个Apache的httpdconfiguration参数,告诉Windows / Internet Explorer(和其他操作系统/浏览器),它需要展开LFCRLF到达?
  2. 或者我可以不知何故告诉Apache用CRLFreplaceLF ,因为它提供了它?

我曾经尝试过

我看过捆绑的Apache mod_mime模块及其指令AddTypeAddCharset但是这些并不能解决问题,甚至声称。

Apache文档在行结束的问题上很安静。

texttypes的MIME文档说明内容必须是CRLF格式 。

字符集编码标准也没有考虑换行符。

记事本中的(严重的恕我直言)限制似乎要解决很多麻烦。 是否有可能在系统上安装更智能的文本编辑器,例如Notepad ++?

我已经解决的(不完美的)解决scheme是使用Apache的mod_ext_filter

 ExtFilterDefine logwin mode=output cmd=/usr/bin/unix2dos intype=text/x-log AddOutputFilter logwin .log # Note that apache2 defines .log as having mime-type text/x-log by default. 

实质上,这就是说,对于任何以.log结尾的文件,它应该在传递给客户端之前通过一个行结束的转换器。

对于重负载机器来说,这不是一个好的解决scheme,因为fork- unix2dos比使用Apache在内部处理要慢。 它也需要转换为每个文件的读取,这是低效的。

不幸的是,Apache基金会没有提供一个内置的modfilter,我没有时间写/维护一个。

但是,我不希望这台机器的高负荷,所以通过工程测量来衡量,这是一个很好的解决scheme。

  • 通过在电线上编码CRLF ,符合mime规范的文本/纯文本
  • 客户端不需要特殊的操作。 尽pipe我很乐意使用更好的文本编辑器,但我不能指望所有的用户都可以更换
  • 如果我需要移动web服务器,重新configuration容易
  • 不要求日志生成器使用非本地(非UNIX)行结束格式