将 RewriteRule 从 apache 移植到 nginx

将 RewriteRule 从 apache 移植到 nginx

我们现在有一个大型 php 应用程序在 apache 上运行,我想将其迁移到 nginx。除了 .htaccess 文件中的 RewriteRule 外,一切都正常工作。

该 Web 应用允许用户存储可公开下载的文件。服务器上的文件可以在其帐户文件夹下的 Web 根目录中找到,该文件夹是其域名,不含子域和域扩展名。因此,对于域 subdomain1.domain2.com,accountname = domain2

/files/{account}

一些例子:

/files/domain1/
/files/domain2/
/files/domain3/

但是我们想要有这样的网址https://subdomain1.domain1.com/files/file.pdf代替https://subdomain1.domain1.com/files/account/file.pdf

这是在 apache 上运行的 RewriteRule。

RewriteCond %{HTTP_HOST} [www\.|subdomain1\.|subdomain2\.]? 
(domain1|domain2|domain3).(com|nl|org)+
RewriteCond %{REQUEST_URI} !files/(domain1|domain2|domain3)+\/
RewriteRule files/(.*) files/%1/$1 [L]

但是尝试将其移植到 nginx 让我很头疼。我尝试了这里可用的选项(https://www.nginx.com/blog/creating-nginx-rewrite-rules/),但似乎没有什么能像我想要的那样发挥作用。

有人知道如何做到这一点吗?

答案1

我希望您知道 nginx 不支持 .htaccess,因此请将其添加到您的配置中:

server {
        listen 80 ; 
        server_name ~^(www|subdomain(1|2))\.(?<domain>domain(1|2|3))\.(com|nl|org)$;

        location ~ ^/files/domain(1|2|3)/ {
        }

        location / {
          rewrite /files/(.*)$ /files/$domain/$1 last;
        }       

}

相关内容