DiliCMS框架Nginx rewrite伪静态配置

作者:袖梨 2022-06-30


例子

代码如下 复制代码

server {
listen 80;
root /path/to/dilicms/;
index index.php;
server_name www.111com.net;

location ~ ^(/(application|system|services|shared|admin/backup|admin/config|admin/controllers|admin/core|amdin/errors|admin/hooks|admin/language))/ {
deny all;
}

location / {

if ($request_uri ~* index/?$)
{
rewrite ^/(.*)/index/?$ /$1 permanent;
}

if (!-d $request_filename)
{
rewrite ^/(.+)/$ /$1 permanent;
}

set $admin '';

if ($request_uri ~* ^/admin/) {
set $admin A;
}

if ($request_uri ~* ^/install/) {
set $admin B;
}

if (!-e $request_filename) {
set $admin "X${admin}";
}

if ($admin = XA) {
rewrite ^/admin/(.*)$ /admin/index.php?/$1 last;
break;
}

if ($admin = XB) {
rewrite ^/install/public/(.*)$ /install/public/index.php?/$1 last;
}

if ($admin = X) {
rewrite ^/(.*)$ /index.php?/$1 last;
break;
}

}


location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /path/to/dilicms$fastcgi_script_name;
include fastcgi_params;
}

location ~ /.ht {
deny all;
}
}

下面再整理一些关于nginx Rewrite的例子


习惯于只在Apache下使用.htaccess文件配置所有信息,通常会将下面规则

代码如下 复制代码

RewriteCond %{HTTP_HOST} example.org
RewriteRule (.*) http://www.**exa*mple.org$1

翻译成这样:

代码如下 复制代码

server {
listen 80;
server_name www.example.org example.org;
if ($http_host = example.org) {
rewrite (.*) http://www.**exa*mple.org$1;
}
...
}

这种做法是错的,复杂而且低效。正确的方式是为example.org定义一个单独的服务器:

代码如下 复制代码

server {
listen 80;
server_name example.org;
return 301 http://www.**e*xample.org$request_uri;
}

server {
listen 80;
server_name www.example.org;
...
}

在0.9.1版本(含)以前,可以这样实现重定向:

代码如下 复制代码

rewrite ^ http://www.e*xamp**le.org$request_uri?;

再举一个例子,处理一个和刚才相反的逻辑:既不是来自example.com,又不是来自www.example.com:

代码如下 复制代码

RewriteCond %{HTTP_HOST} !example.com
RewriteCond %{HTTP_HOST} !www.example.com
RewriteRule (.*) http://www.*ex*amp*le.com$1

应该按下面这样分开定义example.com、www.example.com和其他站点:

代码如下 复制代码

server {
listen 80;
server_name example.com www.example.com;
...
}

server {
listen 80 default_server;
server_name _;
return 301 http://ex*amp*le.*com$request_uri;
}

在0.9.1版本(含)以前,可以这样实现重定向:

代码如下 复制代码

rewrite ^ http://*ex*ampl*e.com$request_uri?;

相关文章

精彩推荐