网站改版,原来很多的东西都在/html下以dj开头,比如dj123,djXXXXxx,djLAMXAO,现在根据seo的规则,要将网站的url规范处理,集体301到新的url,目录也得变,伪静态也得添加,seo给的规则表格是在excel里,看了一眼,200多条,懒得手动一条一条添加,写个shell方便点。
由于都是在excel里,所以直接复制新旧url那两列到服务器上的一个新文件中。
#声明shell
#!/bin/bash
#将每一行的第一个域名替换为空
sed -i 's/m.xxxxxxx.com//' newfile
#将每一行的第一个域名替换为$1
sed -i 's/m.xxxxxxx.com/$1/' newfile
#将所有的html替换为html$
sed -i 's/html/html$/g' newfile
#获取newfile的最后一行行号,决定循环多少次
line_num=`awk 'END{print NR}' newfile`
#循环每一行
for i in `seq $line_num`
#开始循环
do
#打印出当前行存为变量
line=`sed -n "$i p" rewrite`
#输出伪静态规则并且追加到rewrite.txt中
echo "rewrite ^(.*)$line permanent;" >> rewrite.txt
#完成循环
done
#########################################目录拷贝
#声明shell
#!/bin/bash
#获取/html下所有目录名包含dj的目录,并且打印出目录名存为变量
all_file=`ls -l /html/ |grep "^d"|grep "dj" |awk '{print $NF}'`
#循环每一个文件
for i in $all_file
#开始循环
do
#打印出目录的绝对路径,方便排查错误
echo /html/$i
#将目录中的大写英文字母转换成小写英文字母
UPPERCASE=$(echo /html/$i | tr '[A-Z]' '[a-z]')
#输出转换后的结果
echo $UPPERCASE
#输出目录名,并且以dj为分割线,取dj后面的字符串作为新的目录名
cp_dir_dest=`echo $UPPERCASE|awk -F'dj' '{print $NF}'`
#输出要复制成的目录名
echo $cp_dir_dest
#将/html下的所有带dj的目录名,复制到当前目录下的dj目录中,并且复制的目录名为dj之后的名字,比如:原来是dj123,复制过去就是123
cp -r /html/$i ./dj/$cp_dir_dest
#完成循环
done
然后把伪静态规则拷贝到nginx配置文件中,nginx -t;nginx -s reload看看效果。