Nginx URL重写为2个不同的CMS

时间:2016-03-23 22:36:29

标签: php nginx joomla

我在与Nginx相同的服务器中使用Joomla / MariaDB和另一个CMS / PostgreSQL作为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;
}

有人可以指出我哪里出错吗?

1 个答案:

答案 0 :(得分:0)

重写规则存在两个问题:

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

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

如果需要重写所有/sys/Modules.php网址,则可以使用完全匹配位置轻松完成解决方案:

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

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