apache - 如何将此 apache 重写转换为 nginx?

标签 apache .htaccess nginx

以下是unity webgl的apache重写规则

Options +FollowSymLinks
RewriteEngine on

RewriteCond %{HTTP:Accept-encoding} gzip
RewriteRule (.*)Data(.*)\.js $1Compressed$2\.jsgz [L]
RewriteRule (.*)Data(.*)\.data $1Compressed$2\.datagz [L]
RewriteRule (.*)Data(.*)\.mem $1Compressed$2\.memgz [L]
RewriteRule (.*)Data(.*)\.unity3d $1Compressed$2\.unity3dgz [L]
AddEncoding gzip .jsgz
AddEncoding gzip .datagz
AddEncoding gzip .memgz
AddEncoding gzip .unity3dgz

目前在 nginx 我有以下
   location ~* \.(js|data|mem|unity3d)$
   {
   gzip_static on;

   if ($request_filename ~ "\.jsgz$" ) {
                rewrite ^(.js.gz)$ /$1.jsgz;
   }
   if ($request_filename ~ "\.datagz$" ) {
                rewrite ^(.data.gz)$ /$1.datagz;
   }
   if ($request_filename ~ "\.memgz$" ) {
                rewrite ^(.mem.gz)$ /$1.memgz;
   }
   if ($request_filename ~ "\.unity3dgz$" ) {
                rewrite ^(.unity3d.gz)$ /$1.unity3dgz;
   }
   }



   location ~* \.(jsgz|datagz|memgz|unity3dgz)$ {
   add_header Content-Encoding gzip;
   break;
   }

但它不起作用,根据我对原始apache重写的理解,它假设自动将js|data|mem|unity3d压缩为gunzip格式并在文件名末尾添加“gz”名称,如何在nginx中重写而gzip_static 不支持自定义文件名?

最佳答案

您现在可能已经想通了,但是我在自己进行 Apache 到 Nginx 的转换时偶然发现了这个问题。

Nginx 有一个名为 gzip_static 的模块,如果客户端支持 gzip,它将自动查找文件的预压缩版本并提供它们。这要求您将文件从 Compressed 目录移动到 Data 目录,并稍微更改文件扩展名:

之前:

# cd MyProject
# tree
.
|-- Compressed
|   |-- MyProject.datagz
|   |-- MyProject.html.memgz
|   |-- MyProject.jsgz
|   |-- fileloader.jsgz
|   |-- UnityConfig.jsgz
|   |-- UnityProgress.jsgz
|-- Data
|   |-- MyProject.data
|   |-- MyProject.html.mem
|   |-- MyProject.js
|   |-- fileloader.js
|   |-- UnityConfig.js
|   |-- UnityProgress.js

之后:
# tree
.
|-- Compressed
|-- Data
|   |-- MyProject.data
|   |-- MyProject.data.gz
|   |-- MyProject.html.mem
|   |-- MyProject.html.mem.gz
|   |-- MyProject.js
|   |-- MyProject.js.gz
|   |-- fileloader.js
|   |-- fileloader.js.gz
|   |-- UnityConfig.js
|   |-- UnityConfig.js.gz
|   |-- UnityProgress.js
|   |-- UnityProgress.js.gz

在你的 Nginx 配置中:
location /path/to/MyProject/Data {
    gzip_static on;
}

请注意,Nginx 必须使用 --with-http_gzip_static_module 构建。您可以通过运行来检查您的版本是否已经具有此功能:
nginx -V

唯一的缺点是您必须移动/重命名文件,但这对于单线解决方案来说是一个小小的不便。

以下是如何移动/重命名 gzip 文件以匹配 nginx 的期望:
cd Data
mv ../Compressed/*gz ./
rename 's/(.*)gz$/$1.gz/' *gz

关于apache - 如何将此 apache 重写转换为 nginx?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27577632/

相关文章:

php - '/var/spool/cron' 不是目录,正在退出。尝试通过 PHP 的 shell_exec 使用 crontab 时

php - 使用 PHP 进行 301 或 302 重定向

apache - 如何制作 tumblr 风格的个人资料 url

linux - 如何让Nginx虚拟主机正常工作? (找不到网页)

url-rewriting - NGINX - url 重写正则表达式

django - Gunicorn Upstart 文件未启动

apache - .htaccess 中的 DirectoryIndex 给出内部服务器错误

linux - www 文件夹的权限被拒绝

apache - 如何在端口 80 上运行 Node.js?

.htaccess - 使用 .htaccess 阻止对 url 的访问