帝国CMS在Nginx环境下的伪静态规则

今天感觉有一个帝国CMS的网站似乎被挂马了,所以将这个网站重新安装了一下,结果涉及的搜索页伪静态出了问题,过去一直使用Apache的服务器环境,突然被网友给换成了NGINX的环境,而且朋友也没有给出帝国CMS搜索页伪静态的代码,实在是不好再麻烦人间,于是决定自己转写,要将Apache的伪静态规则

1
RewriteRule ^search-(.+?)-(.+?)\.html$ /e/search/result/index\.php\?page=$1&searchid=$2

改写为Nginx的伪静态规则,你可以使用Nginx的 rewrite 指令。以下是改写后的Nginx规则:

1
rewrite ^/search-(.+?)-(.+?)\.html$ /e/search/result/index.php?page=$1&searchid=$2 last;

这里的解释如下:

  • rewrite:这是Nginx中用于URL重写的指令。
  • ^/search-(.+?)-(.+?)\.html$:这是正则表达式,用于匹配请求的URL。^ 表示字符串的开始,$ 表示字符串的结束。(.+?) 是一个非贪婪匹配,它会匹配尽可能少的字符,直到遇到下一个模式或字符串的结束。所以 (.+?)-(.+?)\.html 会匹配两个由 - 分隔的字符串,并以 .html 结尾。
  • /e/search/result/index.php?page=$1&searchid=$2:这是重写后的URL。$1$2 分别代表正则表达式中第一个和第二个括号里匹配到的内容。
  • last:这个标志表示如果当前规则匹配,则停止处理后续的 rewrite 指令,并使用重写后的URI进行请求处理。在这个上下文中,它类似于Apache中的 L 标志。

为确保这个 rewrite 指令放在你的Nginx配置文件中正确的位置,通常是在 server 块或 location 块内。如果你希望这个规则仅对特定的请求路径生效,你可以将其放在一个更具体的 location 块中。例如:

1
2
3
4
5
6
7
location / {  
# 其他配置...

rewrite ^/search-(.+?)-(.+?)\.html$ /e/search/result/index.php?page=$1&searchid=$2 last;

# 其他配置...
}

或者,如果你希望这个规则仅对以 .html 结尾的请求生效,你可以创建一个更具体的 location 块来匹配这些请求:

1
2
3
4
5
location ~* \.html$ {  
rewrite ^/search-(.+?)-(.+?)\.html$ /e/search/result/index.php?page=$1&searchid=$2 last;
# 注意:这里的 ~* 表示不区分大小写的正则表达式匹配
# 如果你希望区分大小写,可以使用 ~ 而不是 ~*
}

但是,请注意,在Nginx中,通常建议使用 try_files 指令来处理静态文件和PHP文件的请求,而不是仅仅使用 rewritetry_files 可以更高效地处理文件存在性检查,并且可以与PHP-FPM等后端服务更好地集成。然而,对于你提供的这种特定类型的重写规则(将URL参数映射到查询字符串),rewrite 是合适的工具。上面的代码大家一定要记住,虽然我们前面已经介绍了帝国CMS搜索页伪静态的设置,但是没有提到nginx下的伪静态规则,那篇文章现在已经修改好,当然大家也可以从这里获取这段代码:

1
rewrite ^/search-(.+?)-(.+?)\.html$ /e/search/result/index.php?page=$1&searchid=$2 last;

好了,感谢大家来到老博客网站,今天给大家分享代码感到很快乐,希望能够帮助到大家。