nginx-用php文件重写js文件

nginx-用php文件重写js文件,nginx,Nginx,对于apache,我使用config.php文件根据域重写config.js文件,config.js包含占位符,占位符被RewriteRule指令替换,这是.htaccess文件: <IfModule mod_rewrite.c> RewriteBase /foo RewriteEngine On RewriteRule config.js config.php [L,QSA] </IfModule> 但是有内部服务器错误 谢谢所有nginx u

对于apache,我使用config.php文件根据域重写config.js文件,config.js包含占位符,占位符被
RewriteRule
指令替换,这是.htaccess文件:

<IfModule mod_rewrite.c>
    RewriteBase /foo
    RewriteEngine On
    RewriteRule config.js config.php [L,QSA]
</IfModule>
但是有内部服务器错误


谢谢

所有nginx uri都以斜杠开头。使用
rewrite config.js config.php
将URI从
/foo/config.js
重写为
config.php
。nginx无法处理该URI,导致内部服务器错误

rewrite
指令的第一个参数始终被视为正则表达式,其中点匹配任何符号。因此,您的
rewrite
规则将匹配包含
config*js
子字符串的任何字符串。我认为这不是你真正想要的

rewrite
指令的第二个参数是一个全新的URI,而不是字符串的替换部分。要进行替换,请使用类似于
重写^(.*)旧字符串(.*)$$1新字符串$2

因为您正在将请求重写为PHP脚本,所以应该强制nginx使用定义PHP-FPM处理程序的位置来处理新的URI。为此,您应该使用
last
标志,而不是带有
rewrite
指令的
break
标志

综上所述,你需要

位置/foo{
别名/src/www/foo;
index.html;
最后重写^/foo/config\.js$/foo/config.php;
}
再来一张。作为nginx文档:

当位置与指令值的最后一部分匹配时:

location /images/ {
    alias /data/w3/images/;
}
最好改用root指令:

location /images/ {
    root /data/w3;
}

因此最好使用
root/src/www
而不是
别名/src/www/foofoo
子字符串真的相等,则在此
位置
块中编写code>。

对不起,我写的是
最后一个
而不是
中断
,但没有在配置代码块中更改它。更新了一个答案。谢谢回复,这样当我转到我看到的文件配置。php@hellb0y77那么您还没有将nginx设置为使用PHP-FPM(或任何其他PHP处理程序)吗?您应该在服务器上安装php fpm,并定义一个特殊的
位置~\.php${…}
来使用它(这是最常见的方法,例如,还有其他选择)。默认nginx配置应该有一个使用PHP-FPM的示例(默认情况下注释)。这超出了您的问题范围,请检查one.nginx是否使用php fpm,我已尝试将phpinfo文件放置在config.php的同一路径并进行工作。@hellb0y77是否有
重写。。。最后,而不是
重写。。。中断?也许您的浏览器缓存了响应?是的
rewrite^/foo/config.js$/foo/config.php last
location /images/ {
    root /data/w3;
}