phpcms修改域名(linux+nginx环境)
以下操作是针对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”,修改数据库名、账号、密码,即可。
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】
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; } }
重启nginx(重启了host才会生效)
/usr/local/nginx/sbin/nginx -s reload
至此,域名更换就完成了
以上亲测有效~解决phpcms更换域名的问题。