litespeedtech / openlitespeed

Our high-performance, lightweight, open source HTTP server
https://openlitespeed.org
GNU General Public License v3.0
1.16k stars 189 forks source link

SnappyMail does not work #335

Open hifihedgehog opened 2 years ago

hifihedgehog commented 2 years ago

See https://github.com/the-djmaze/snappymail/issues/525. Per @the-djmaze's direction, I made some changes to get SnappyMail to work. Namely, I deleted the .htaccess file that optimizes SnappyMail for fast load times with precompressed files. I would like to serve these files and that requires .htaccess. See below for more details.

hifihedgehog commented 2 years ago

With @the-djmaze's help, I was able to pinpoint the problem file which is .htaccess located under the directory public_html/snappymail/v/2.N.N/static/. The file contents are so:

<IfModule mod_headers.c>
    <IfModule mod_rewrite.c>
        RewriteEngine On

        RewriteCond %{HTTP:Accept-encoding} br
        RewriteCond "%{REQUEST_FILENAME}\.br" -s
        RewriteRule "^(.+\.js)$" "$1\.br" [L,T=application/javascript,QSA]

        RewriteCond %{HTTP:Accept-encoding} gzip
        RewriteCond "%{REQUEST_FILENAME}\.gz" -s
        RewriteRule "^(.+\.js)$" "$1\.gz" [L,T=application/javascript,QSA]

        RewriteCond %{HTTP:Accept-encoding} br
        RewriteCond "%{REQUEST_FILENAME}\.br" -s
        RewriteRule "^(.+\.css)$" "$1\.br" [L,T=text/css,QSA]

        RewriteCond %{HTTP:Accept-encoding} gzip
        RewriteCond "%{REQUEST_FILENAME}\.gz" -s
        RewriteRule "^(.+\.css)$" "$1\.gz" [L,T=text/css,QSA]

        <FilesMatch "(\.js\.br|\.css\.br)$">
            SetEnv no-gzip 1
            SetEnv no-brotli 1
            # Serve correct encoding type.
            Header append Content-Encoding br
            # Force proxies to cache brotli &
            # non-brotli css/js files separately.
            Header append Vary Accept-Encoding
        </FilesMatch>

        <FilesMatch "(\.js\.gz|\.css\.gz)$">
            SetEnv no-gzip 1
            SetEnv no-brotli 1
            # Serve correct encoding type.
            Header append Content-Encoding gzip
            # Force proxies to cache gzipped &
            # non-gzipped css/js files separately.
            Header append Vary Accept-Encoding
        </FilesMatch>

        <FilesMatch "(\.js\.br|\.js\.gz)$">
            Header set Content-Type "application/javascript; charset=utf-8"
            ForceType application/javascript
        </FilesMatch>
        <FilesMatch "(\.css\.br|\.css\.gz)$">
            Header set Content-Type "text/css; charset=utf-8"
            ForceType text/css
        </FilesMatch>
    </IfModule>
</IfModule>

If I delete the .htaccess file, SnappyMail miraculously works. However, it should work without deleting this file. Technically, OpenLiteSpeed now supports .htaccess files but it does so with changes. Ideally, I want to use it so I can serve the precompressed files. How could this .htaccess file be made to work within the constraints of OpenLiteSpeed?