nginx - nginx - 用 php 文件重写 js 文件
问题描述
使用 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 我看到一些值,而不是进入 develop.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
to 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 与指令值的最后一部分匹配时:
location /images/ { alias /data/w3/images/; }
最好使用 root 指令:
location /images/ { root /data/w3; }
因此,如果子字符串确实相等,则最好在此块中使用root /src/www;
而不是alias /src/www/foo;
在此块中使用。location
foo
推荐阅读
- javascript - 当计时器达到两位数时,localStorage 中断
- node.js - 将 NestJS 部署到 Azure DevOps:错误:找不到模块“../commands”
- java - 如何将文件和正文添加到 MockMvc?
- sql - PostgreSQL在查询中检查父级的父级
- sql-server - T-SQL 多重重复检查
- python-3.x - 我不允许在其他电脑上运行 python 可执行文件
- python - Python - 创建元组矩阵
- c# - 自定义字体在 xamrain 表单中未按预期工作
- laravel - 有没有办法避免使用 Laravel Passport 将用户重定向到 Laravel 后端登录页面?
- pointers - 将引用的内部结构字段与go中的字符串类型进行比较