2

以下问题与这个问题高度相关。

Apache 版本是 2.2,因此没有提供“If”语句。服务器仅包含压缩文件,以节省空间。用户可以请求 gzip 压缩文件或仅请求其解压缩内容,具体取决于 Accept-Encoding。

这是 httpd.conf 的伪配置:

<Directory /data/compressed>
    RewriteEngine on

    # Check file exists
    RewriteCond %{REQUEST_FILENAME}gz -s

    # Append a .gz to the requested filename
    RewriteRule ^(.+)\.txt$ $1\.txt\.gz [QSA]

    # If request contains "Accept-Encoding: gzip":
         # Set the appropriate Content-Type and Content-Encoding
         Header set Content-Type "application/gzip"
         Header set Content-Encoding "gzip"
    # Else:
         # Decompress the .gz
         FilterDeclare gzip CONTENT_SET
         FilterProvider gzip INFLATE req=Accept-Encoding !$gzip
         FilterChain gzip

         # Set the appropriate Content-Type and Content-Encoding
         Header set Content-Type "text/plain"
         Header unset Content-Encoding

         # Serve the decompressed (.txt) file, without ending ".gz"
         # ???

</Directory>

因此,如果客户端可以处理压缩内容,服务器将简单地检索 .gz 文件(注意:客户端专门请求“file.txt”而不是“file.txt.gz”)并提供它。如果客户端无法处理压缩内容,服务器将找到 .gz 文件,将其解压缩,相应地更改标题,然后提供文件。

我正在寻求您的帮助,因为找不到使用 Apache 规则评估 if 块的方法。此外,我想知道如何在提供之前从未压缩文件中删除 .gz 。

谢谢你。

4

0 回答 0