为2个不同的CMS重写Nginx URL


Nginx URL rewriting for 2 different CMS

我在同一服务器中使用Joomla/MariaDB和另一个CMS/PostgreSQL,Nginx作为web服务器。joomla的重写规则同样有效,但对另一个规则不起作用。PostgreSQL CMS的URL结构如下:

http://example.com/dir/Something.php?somename=Blah_Setup/Otherstring.php
http://example.com/dir/Something.php?somename=Blah_Setup/Otherstring.php&new_blah=true
http://example.com/dir/Something.php?somename=Blah_Setup/Otherstring.php&include=General_Info&worker_id=new

这就是我所拥有的:

location /sis/ {
     rewrite ^(/sis)/Modules.php?modname=(.*/)'..*$ $1/$2  last;
}

有人能指出我哪里错了吗?

重写规则有两个问题:

  • location /sis/不处理以.php结尾的URI,因此它们永远看不到您的重写规则
  • 查询字符串(从?开始)不被视为重写模式的一部分

通过使用预定义的变量$arg_modname,可以轻松地提取modname参数的值。

如果所有的/sys/Modules.php URL都需要重写,那么使用一个精确匹配的位置就可以很容易地完成该解决方案:

location = /sis/Modules.php {
    rewrite ^ /sis/$arg_modname last;
}

如果只有那些具有$arg_modname的URI需要重写,则需要将其封装在if ($arg_modname) { ... }块中。但它确实增加了复杂性,因此在没有看到整个服务器配置的情况下,很难提供一个简单的示例。