我在同一服务器中使用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) { ... }
块中。但它确实增加了复杂性,因此在没有看到整个服务器配置的情况下,很难提供一个简单的示例。