以下操作是针对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;
}
}
View Code
重启nginx(重启了host才会生效)
/usr/local/nginx/sbin/nginx -s reload
至此,域名更换就完成了
以上亲测有效~解决phpcms更换域名的问题。