germn
@germn

Как с помощью rewrite в Nginx отдавать вместо test.js результат выполнения test.js.php?

Задача: при запросе site.ru/test.js должен отдаваться отработавший /php/test.js.php с content-type application/x-javascript.

В Apache это работало так:

RewriteEngine on
RewriteRule ^test.js php/test.js.php [L]

Работает: вбиваем в браузере site.ru/test.js, получаем отработавший test.js.php с content-type application/x-javascript.

Пробую сделать в Nginx:

location / {
...

rewrite ^/test.js /php/test.js.php break;
}

location ~ \.php$ {
 ...

fastcgi_pass   unix:/tmp/php-fpm.sock;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
include        fastcgi_params;
}

php отдается как текст, content-type — тот, который в конфиге указан как default_type

Пробую по-другому:

location / {
...
fastcgi_pass   unix:/tmp/php-fpm.sock;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
include        fastcgi_params;

rewrite ^/test.js /php/test.js.php break;
}

Уже лучше — /php/test.js.php выполняется и отдается при запросе /test.js, но content-type всё ещё default_type, а не application/x-javascript.

Подскажите, пожалуйста, как правильно решить задачу?

Заранее спасибо!
  • Вопрос задан
  • 3929 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Silver_Clash
Может вопрос прозвучит глупо (nginx использую всего пару недель), но разве не проще/лучше было бы сделать отдельный location для этого файла вместо «rewrite ^/test.js /php/test.js.php break;»?
Ответ написан
tyzhnenko
@tyzhnenko
System Administrator, DevOps, QA Engineer
location /test.js {
  fastcgi_pass fastcgi;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME /php/test.js.php;
}


fastcgi не использовал с nginx, поэтому не могу больше подсказать. Возможно надо будет подправить что-то с fastcgi параметрами.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы