IIS到nginx迁移:`意外'{“`erron on \ d {^ anum ^,^ anum ^}条目映射文件
我的任务是将运行在azure/iis中的php应用程序迁移到nginx + fpm组合一台GNU + Linux机器。IIS到nginx迁移:`意外'{“`erron on d {^ anum ^,^ anum ^}条目映射文件
的web.config
包含:
<rule name="Some match">
<match url=".*"/>
<conditions>
<add input="{URL}" pattern="^power_ranger/(\d{4,9})$" />
</conditions>
<action type="Rewrite" url="/power_ranger.php?ranger={C:1}"/>
</rule>
后来跟随我创建了一个名为rewrites.map
下列地图文件中https://serverfault.com/questions/441235/maintaining-redirects-in-nginx-from-an-external-source#441517看到的指令:
^power_ranger/(\d{4,9})$ /power_ranger.php?ranger=$2
而且对虚拟主机的配置,我把以下内容:
map $uri $new {
include /home/user/powerangerApp/rewrites.map;
}
if ($new) {
rewrite^$new redirect;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
root /home/user/powerangerApp;
index index.php;
server_name _;
location/{
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
}
然后,当我尝试重新加载nginx的我得到以下错误:
nginx: [emerg] unexpected "{" in /home/user/powerangerApp/rewrites.map:1
所以我的猜测是,nginx的不能映射PCRE正则表达式。那么我怎样才能让nginx做到这一点?
编辑1:
可以看出在https://serverfault.com/questions/482372/nginx-httpmapmodule-regex-variables#482391:
我试图改变正则表达式:
?P^power_ranger/(\d{4,9})$ /power_ranger.php?ranger=$2
而且还得到了同样的错误。
编辑2
到目前为止,我想通了,我需要一个if条件,我的nginx的配置:
if ($url ~* "^power_ranger/(\d{4,9})$"){
rewrite^/power_ranger.php?ranger=$2
}
但我得到一个错误:
unknown directive ranger=$2 in /etc/nginx/nginx.conf:^some_number^
你研究员knwo如何解决这个问题?
正则表达式应该改为:
~\/power_ranger\/(\d{4,9})$ /power_ranger.php?ranger=$1;
正如你可以看到有是语法错误。
另外,nginx.conf应该是:
map $uri $new {
include /home/user/powerangerApp/rewrites.map;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
root /home/user/powerangerApp;
index index.php;
server_name _;
location/{
# On way too many rewrite rules you may avoit the line above
try_files $uri $uri/ =404;
if ($new) {
rewrite^$new redirect redirect;
}
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
}
请记住,在重写重定向可能被证明是为了把工作做好救星。