1.首页跳转的示例:
if ($host ~* ^chinasoft.com$){ rewrite ^(.*)$ https://www.chinasoft.com$1 permanent;}
if ($request_uri ~ ^/(.*)/(index|indice).(html)) { rewrite ^/(.*)/(index|indice).(html) /$1   permanent;}
if ($request_uri ~ ^/(index|indice).html) { rewrite    ^       / permanent;}

 

对照:

# 设置index.html或者index.php跳转到/      /$1/ 的方法可以避免类似2级以上的目录多次跳转  https://www.chinasoft.com/es/guide/index.html

if ($request_uri ~ ^/(.*)/(index|indice).(html|php)) { rewrite ^/(.*)/(index|indice).(html|php) /$1/   permanent;}
if ($request_uri ~ ^/(index|indice).(html|php)) { rewrite    ^       / permanent;}

2.跳转后去掉参数
https://mobiletrans.chinasoft.com/buy/?f=pro  跳转到 https://mobiletrans.chinasoft.com/buy/a.html

最终如下配置 跳转到了  https://mobiletrans.chinasoft.com/buy/a.html?f=pro

if ($request_uri ~ ^/buy/\?f\=pro) { rewrite ^ https://mobiletrans.chinasoft.com/buy/a.html permanent; }
if ($request_uri ~ ^/buy/$) { rewrite ^ https://mobiletrans.chinasoft.com/buy/a.html permanent; }

# 加上?号,可以去掉 ? 后面的参数
if ($request_uri ~ ^/buy/\?f\=pro) { rewrite ^ https://mobiletrans.chinasoft.com/buy/a.html? permanent; }


3.多层目录下首页index.html跳转
默认的跳转规则:
[root@web02:/usr/local/nginx/conf/rewrite.d]# more film.chinasoft.com.conf
if ($request_uri ~ ^/(.*)/(index|indice).(html)) { rewrite ^/(.*)/(index|indice).(html) /$1   permanent;}


类似 index.html结尾的跳转,会跳转两次
https://film.chinasoft.com/screen-recorder-faq/installation/index.html

会跳到
https://film.chinasoft.com/screen-recorder-faq/installation

然后再次跳转到 https://film.chinasoft.com/screen-recorder-faq/installation/

修改后
# more film.chinasoft.com.conf
if ($request_uri ~ ^/(.*)/(index|indice).(html)) { rewrite ^/(.*)/(index|indice).(html) /$1/   permanent;}


https://film.chinasoft.com/screen-recorder-faq/installation/index.html 可以直接跳转到 https://film.chinasoft.com/screen-recorder-faq/installation/


部分地区不行
https://film.chinasoft.com/chinasoft-id-guide/index.html


4.404页面的跳转问题

a.配置了404页面,跳转不到根目录的404.html,即打开的错误页面不变,不发生301跳转就显示 /404.html
error_page  404 403            /404.html;

b.于是配置了 error_page  404 403            https://film.chinasoft.jp/404.html;  这样会导致大量的404发生301跳转,不利于seo优化

c.之前配置nginx.conf的主配置添加下面参数就可以了,该次不生效

proxy_intercept_errors on;
fastcgi_intercept_errors on;

d.想着模拟一次生产环境,进行验证
①.拷贝 生产的 /data/www/vhosts/film.chinasoft.jp 目录到yunweitools中
②.配置vhost.d和rewrite.d的配置,问题依旧说明不是nginx版本的问题
③.于是拷贝正常跳转的一个配置进行修改,问题解决
④.于是diff对比之前的配置和现在正常的配置,发现没有大的区别  httpsdocs 多了一个s,这才是问题的关键

 root            /data/www/vhosts/film.chinasoft.jp/httpdocs ; 是  root            /data/www/vhosts/film.chinasoft.jp/httpsdocs ;


5.多个网站需要设置跨域的配置
map $http_origin $corsHost {
    default 0;
    "~http://www.chinasoft.com" http://www.chinasoft.com;
    "~http://m.chinasoft.com" http://m.chinasoft.com;
}

https://shopcart.chinasoft.com,https://film.chinasoft.com'

server
{
    listen 80;
    server_name search.chinasoft.com;
    root /nginx;
    location /
    {
        add_header Access-Control-Allow-Origin $corsHost;
    }
}


6.404页面跳转不生效的问题处理

[/usr/local/nginx/conf/vhost.d]# cat film.chinasoft.jp.conf
server {
        listen 80;
        server_name     film.chinasoft.jp ori-film.chinasoft.jp ;
        access_log off;
        access_log      /data/www/logs/nginx_log/access/film.chinasoft.jp_access.log main ;
        error_log       /data/www/logs/nginx_log/error/film.chinasoft.jp_error.log ;
        root            /data/www/vhosts/film.chinasoft.jp/httpdocs ;
        index           index.html index.shtml index.php ;
        include                rewrite.d/film.chinasoft.jp.conf ;

        error_page  404 403            /404.html;

    rewrite ^/(.*)$ https://film.chinasoft.jp/$1 permanent;    #跳转到Https

}

server {
        listen 443;
        ssl on;

        ssl_certificate         cert2016/chinasoft_jp.crt;
        ssl_certificate_key     cert2016/chinasoft_jp.key;
        ssl_dhparam     cert2016/dh_2048.pem;

        ssl_session_timeout     30m;
        ssl_protocols   TLSv1 TLSv1.1 TLSv1.2;


        ssl_ciphers     "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!AES128-GCM-SHA256:!AES256-GCM-SHA384:!AES128-SHA256:!AES256-SHA256:!AES128-SHA:!AES256-SHA:AES:!CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA";


        ssl_prefer_server_ciphers       on;

        add_header 'Access-Control-Allow-Origin' '*';

        server_name     film.chinasoft.jp ori-film.chinasoft.jp;
        access_log      /data/www/logs/nginx_log/access/film.chinasoft.jp_access.log main ;
        error_log       /data/www/logs/nginx_log/error/film.chinasoft.jp_error.log ;

        root            /data/www/vhosts/film.chinasoft.jp/httpdocs ;
        index           index.html index.shtml index.php ;
        include         rewrite.d/film.chinasoft.jp.conf ;

        error_page  404 403             /404.html;

        if ($http_user_agent ~ Ezooms) {
        return 403;
        }

        location ~ \.php$ {
                        proxy_pass http://php_pool;
                        expires -1;
                        include proxy_params;
        }

        location / {
                include proxy_params;
                if (!-d $request_filename){
                        set $flag 1$flag;
                }
                if (!-f $request_filename){
                        set $flag 2$flag;
                }
                if ($flag = "21"){
                        proxy_pass http://php_pool;
                        expires -1;
                }

        }

}

7.页面一一跳转对应:a.com/xx.html 跳转 b.com/xx.html

# 普通写法
if ($request_uri ~ ^/de/1.html$) { rewrite ^ https://film.chinasoft.com/es/1.html permanent; }

# 将 de 下所有 xx.html 跳转 到 https://film.chinasoft.com/es/xx.html

# 一下写法都对
rewrite ^/de/([0-9a-z]+)\.html$  https://film.chinasoft.com/es/$1.html permanent;

rewrite ^/de/([\w]+)\.html$  https://film.chinasoft.com/es/$1.html permanent;

if ($request_uri ~ ^/de/([\w]+)\.html$) { rewrite ^^/de/([0-9a-z]+)\.html$ https://film.chinasoft.com/es/$1.html permanent; }

 



问题描述:访问 https://stu.chinasoft.com/aaaa/bbbb/ 类似这种不存在的页面返回首页,访问各种不存在的页面都返回首页,测试了很多种方法不行

后面出了狠招,直接将环境移植到一台可以测试的服务器中(可以任意测试,没有风险)
可能出现的问题:
1.整体的nginx环境问题
2.nginx配置问题
3.页面有隐性跳转

具体步骤:
1.部署好nginx和php移植后台程序到测试服务器,本地绑定hosts,发现问题依旧,排除服务器环境问题
2.将首页改为 <h1>index</h1> 404.html改为 <h1>404</h1>,避免页面内部问题,发现问题依旧,排除页面问题
3.修改vhost/stu.chinasoft.com文件,将php部分注释掉发现问题没有了
定位到是php部分的配置问题


[root@EOP_chinasoft_web01:/usr/local/nginx/conf/vhost.d]# cat stu.chinasoft.com.conf
server {
        listen 80;
        server_name     stu.chinasoft.com;
        access_log      /data/www/logs/nginx_log/access/stu.chinasoft.com_access.log main ;
        error_log       /data/www/logs/nginx_log/error/stu.chinasoft.com_error.log ;
        root            /data/www/vhosts/stu.chinasoft.com/httpdocs ;
        index           index.html index.shtml index.php ;
    include        rewrite.d/stu.chinasoft.com.conf ;
    error_page  404 403             /404.html;    

        rewrite ^/(.*)$ https://stu.chinasoft.com/$1 permanent;    #跳转到Https,http部分下面的代码可以忽略
        
        location ~ \.php$ {
                fastcgi_pass unix:/tmp/php-cgi.sock;
                fastcgi_index index.php;
                #fastcgi_param SCRIPT_FILENAME ;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
                expires -1;
        }

    location / {
                include proxy_params;
                if (!-d $request_filename){
                        set $flag 1$flag;
                }
                if (!-f $request_filename){
                        set $flag 2$flag;
                }
                if ($flag = "21"){
                                rewrite ^(.*)$ /index.php last;
                        expires -1;
                }
        }


}

server {
        listen 443;
        ssl on;

        ssl_certificate         cert2016/chinasoft_com.crt;
        ssl_certificate_key     cert2016/chinasoft_com.key;
        ssl_dhparam     cert2016/dh_2048.pem;

        ssl_session_timeout     5m;
        ssl_protocols   TLSv1 TLSv1.1 TLSv1.2;


        ssl_ciphers     "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-E
CDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-S
HA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!AES128-GCM-SHA256:!AES256-GCM-SHA384:!AES128-SHA256:!AES256-SHA256:!AES128-SHA:!AES256-SHA:AES:!CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:ED
H-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA";


        ssl_prefer_server_ciphers       on;
#       add_header Strict-Transport-Security max-age=15768000;

        #ssl_stapling        on;
        #ssl_stapling_verify        on;


        server_name     stu.chinasoft.com;
        access_log      /data/www/logs/nginx_log/access/stu.chinasoft.com_access.log main ;
        error_log       /data/www/logs/nginx_log/error/stu.chinasoft.com_error.log ;

        root            /data/www/vhosts/stu.chinasoft.com/httpdocs ;
        index           index.html index.shtml index.php ;
        include         rewrite.d/stu.chinasoft.com.conf ;
        error_page  404 403             /404.html;

        location ~ \.php$ {
                fastcgi_pass unix:/tmp/php-cgi.sock;
                fastcgi_index index.php;
                #fastcgi_param SCRIPT_FILENAME ;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
                expires -1;
        }
    
    # 问题就出在这里
        location / {
                include proxy_params;
                if (!-d $request_filename){
                        set $flag 1$flag;
                }
                if (!-f $request_filename){
                        set $flag 2$flag;
                }
        # 问题就出在这里,直接注释掉即可
                if ($flag = "21"){
                        rewrite ^(.*)$ /index.php last;
                        expires -1;
                }
            error_page  404 403             /404.html;
        }

}

film.chinasoft.jp.conf配置
# 404配置,访问不存在的页面不生效
error_page  404 403              /404.html;

# https://film.chinasoft.jp/404.html 页面存在
于是修改
error_page  404 403              https://film.chinasoft.jp/404.html;


8.修改默认首页
页面地址:
https://recoverit.chinasoft.com/support/refund-and-renewal-faqs.html

点击里面的链接会跳到

http://support.chinasoft.com/&_ga=2.1314520.1688688#/article?id=1710

返回1

加入:
location / {
          try_files $uri $uri/ /index.html;
    }


需求:
原URL地址                            跳至地址
https://www.chinasoft.cc/conn/convert-3gp-to-flv.html    https://www.chinasoft.cc/

访问https://www.chinasoft.cc/conn/convert-3gp-to-flv.html会自动跳转到主页:
分析:
1.可能是cdn缓存,发现这个站点没有用cdn排除
2.跳转规则有问题,发现没有这样的跳转规则,这个站点除了默认的跳转规则没有做任何跳转
3.将 /data/www/vhosts/httpds/conn/ 目录下的 convert-3gp-to-flv.html 文件备份,改成输出ok
(本地指一台机器作为chinasoft.cc的机器)发现没有跳转,替换成原来的就跳转
说明没有这个url的跳转规则,所以规则来自页面内的js或者html需要开发定位修改

1.vhost.d规则限制了跳转
原地址                            取消跳转至
https://videoconn.chinasoft.com/fr/convert-mp4/    https://videoconn.chinasoft.com


发现rewrite里面没有这个规则,是因为设置了

error_page  404 403        https://videoconn.chinasoft.com ;

当碰到404的时候跳转到首页

2.当设置一个目录跳转时,目录下的子页面也全部跳转了

# 跳转设置
if ($request_uri ~ ^/download/) { rewrite ^ https://stu.chinasoft.com/downloads/ permanent; }
if ($request_uri ~ ^/download/2.html) { rewrite ^ https://stu.chinasoft.com/downloads/ permanent; }
if ($request_uri ~ ^/download/3.html) { rewrite ^ https://stu.chinasoft.com/downloads/ permanent; }

发生了问题
故障1
访问 https://stu.chinasoft.com/download/download-high-school.html 跳转到了https://stu.chinasoft.com/downloads/

分析:
当设置了目录跳转 ^/download/ 开头的页面全部到 https://stu.chinasoft.com/downloads/会导致 download目录下的页面全部跳转到   https://stu.chinasoft.com/downloads/

解决:添加限定符号$,只匹配一个页面
if ($request_uri ~ ^/download/$) { rewrite ^ https://stu.chinasoft.com/downloads/ permanent; }

故障2
当访问 https://stu.chinasoft.com/download/ 出现404

当用f12时发现访问  https://stu.chinasoft.com/download 出现403 forbidden
解决办法
chmod 755 /data/www/vhosts/stu.chinasoft.com/httpdocs/download

 

php代码的跳转

# 跳转 seo
<?php header('content-type:text/html;charset=uft-8');
header ("location:https://www.chinasoft.com/de/products.html"); ?>