用php文件重写js文件

  • 本文关键字:文件 js 重写 php 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>

当我进入URL production.com/foo/config.js时,我看到了一些值,而进入development.com/foo/config.js时,我会看到其他值,这些值定义在config.php 中

现在我需要转到nginx,但我不知道如何复制apache规则,我尝试了:

location /foo {
alias /src/www/foo;
index index.html;
rewrite config.js config.php break;
}

但存在内部服务器错误

感谢

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

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

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

由于您正在将请求重写为PHP脚本,因此应该强制nginx在定义PHP-FPM处理程序的位置处理新的URI。要做到这一点,您应该使用last标志,而不是break标志和rewrite指令。

综上所述,你需要像这样的东西

location /foo {
alias /src/www/foo;
index index.html;
rewrite ^/foo/config.js$ /foo/config.php last;
}

还有一个注意事项。正如nginx文档所述:

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

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

最好使用根指令:

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

,因此如果foo子串真的相等,则在该location块内使用root /src/www;而不是alias /src/www/foo;会更好。

最新更新