Порт RewriteRule от apache до nginx
У нас сейчас есть большое php-приложение, работающее на apache, которое я хотел бы перенести на nginx. У меня есть все, чтобы работать правильно, за исключением RewriteRule в файле.htaccess.
Веб-приложение позволяет пользователю хранить файлы, которые можно публично загрузить. Файлы на сервере можно найти в корневом веб-каталоге в папке их учетной записи, которая является их доменным именем без субдомена и расширения домена. Таким образом, для домена subdomain1.domain2.com имя учетной записи = domain2
/files/{account}
Некоторые примеры:
/files/domain1/
/files/domain2/
/files/domain3/
Однако мы хотим иметь URL-адреса, такие как https://subdomain1.domain1.com/files/file.pdf вместо https://subdomain1.domain1.com/files/account/file.pdf
Это RewriteRule, который работает на Apache.
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;
}
}