以下操作是针对phpcms修改域名存在两个问题:

1、数据库中保存着旧域名

2、缓存文件保存着旧域名

以上问题会导致图片/文件无法显示、页面跳转到旧地址的问题。

下面是解决的方式(适用于linux+nginx环境)

1、用nginx命令,修改各个文件中的域名

sed -i "s/旧域名/新域名/g" 项目根目录/index.html;
sed -i "s/旧域名/新域名/g" 项目根目录/caches/configs/system.php;
sed -i "s/旧域名/新域名/g" 项目根目录/caches/caches_commons/caches_data/category_content_1.cache.php;
sed -i "s/旧域名/新域名/g" 项目根目录/caches/caches_commons/caches_data/position.cache.php;
sed -i "s/旧域名/新域名/g" 项目根目录/caches/caches_commons/caches_data/sitelist.cache.php;
sed -i "s/旧域名/新域名/g" 项目根目录/phpsso_server/caches/caches_admin/caches_data/applist.cache.php;
sed -i "s/旧域名/新域名/g" 项目根目录/phpsso_server/caches/configs/system.php;

以上是我找到的有域名缓存的文件。

sed -i 是linux命令,用于替换文件中的字符串,/g是指全局替换。每一句后面加上分号就可以一起执行。

注意,替换时,新旧域名最好不要加上http://前缀,避免有的文件写的是"http:\/\/"的格式,就替换不到了

2、修改数据库配置

(改域名往往也意味着迁移数据库,因此数据库的配置也要相应改变)

打开项目目录中的“/caches/configs/database.php”,修改数据库名、账号、密码,即可。

nginx替换二级域名无效 nginx修改域名_数据库

 

 3、替换数据库中的域名地址

UPDATE `数据库名`.`kaidu_v9_category` set `url`=replace(`url`, '旧域名', '新域名');
UPDATE `数据库名`.`kaidu_v9_download` set `thumb`=replace(`thumb`, '旧域名', '新域名');
UPDATE `数据库名`.`kaidu_v9_download` set `url`=replace(`url`, '旧域名', '新域名');
UPDATE `数据库名`.`kaidu_v9_download_data` set `content`=replace(`content`, '旧域名', '新域名');
UPDATE `数据库名`.`kaidu_v9_download_data` set `bgImage`=replace(`bgImage`, '旧域名', '新域名');
UPDATE `数据库名`.`kaidu_v9_news` set `thumb`=replace(`thumb`, '旧域名', '新域名');
UPDATE `数据库名`.`kaidu_v9_news` set `url`=replace(`url`, '旧域名', '新域名');
UPDATE `数据库名`.`kaidu_v9_news_data` set `content`=replace(`content`, '旧域名', '新域名');
UPDATE `数据库名`.`kaidu_v9_page` set `content`=replace(`content`, '旧域名', '新域名');
UPDATE `数据库名`.`kaidu_v9_picture` set `thumb`=replace(`thumb`, '旧域名', '新域名');
UPDATE `数据库名`.`kaidu_v9_picture` set `url`=replace(`url`, '旧域名', '新域名');
UPDATE `数据库名`.`kaidu_v9_picture` set `description`=replace(`description`, '旧域名', '新域名');
UPDATE `数据库名`.`kaidu_v9_picture_data` set `content`=replace(`content`, '旧域名', '新域名');
UPDATE `数据库名`.`kaidu_v9_picture_data` set `pictureurls`=replace(`pictureurls`, '旧域名', '新域名');
UPDATE `数据库名`.`kaidu_v9_picture_data` set `overview`=replace(`overview`, '旧域名', '新域名');
UPDATE `数据库名`.`kaidu_v9_position` set `thumb`=replace(`thumb`, '旧域名', '新域名');
UPDATE `数据库名`.`kaidu_v9_position_data` set `data`=replace(`data`, '旧域名', '新域名');
UPDATE `数据库名`.`kaidu_v9_poster` set `setting`=replace(`setting`, '旧域名', '新域名');
UPDATE `数据库名`.`kaidu_v9_site` set `domain`=replace(`domain`, '旧域名', '新域名');
UPDATE `数据库名`.`kaidu_v9_sso_applications` set `url`=replace(`url`, '旧域名', '新域名');

这是用了sql语句:UPDATE `数据库名`.`表名` set `字段`=replace(`字段`, '', '');

可以替换指定表中的指定字段的指定文本。

4、【修改host文件】并【重启nginx】

nginx替换二级域名无效 nginx修改域名_v9_02

nginx替换二级域名无效 nginx修改域名_nginx替换二级域名无效_03

nginx替换二级域名无效 nginx修改域名_php_04

server {
    listen 80;
    server_name www.domain.com;
    access_log /data/wwwlogs/access_nginx.log combined;
    root /data/wwwroot/www.domain.com;
    index index.html index.htm index.php;
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    location /nginx_status {
      stub_status on;
      access_log off;
      allow 127.0.0.1;
      deny all;
    }
    location ~ [^/]\.php(/|$) {
      #fastcgi_pass remote_php_ip:9000;
      fastcgi_pass unix:/dev/shm/php-cgi.sock;
      fastcgi_index index.php;
      include fastcgi.conf;
    }
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
      expires 30d;
      access_log off;
    }
    location ~ .*\.(js|css)?$ {
      expires 7d;
      access_log off;
    }
    location ~ ^/(\.user.ini|\.ht|\.git|\.svn|\.project|LICENSE|README.md) {
      deny all;
    }
  }

View Code

重启nginx(重启了host才会生效)

/usr/local/nginx/sbin/nginx -s reload

 

至此,域名更换就完成了

以上亲测有效~解决phpcms更换域名的问题。