帝国CMS把栏目下的文章转移到新栏目里,URL地址保持不变

有时候需要把一个栏目下的部分或全部文章,转移到别的栏目下。比如某个栏目现在要创建子栏目,创建子栏目之前,要先把它转换成非终极栏目,要转换成终极栏目,就必须把栏目下的文章转移了。

文章较多,且文章都被搜索引擎收录了,最好要保持URL地址不变,这样对SEO更友好。

如果是转移到新建栏目下,那很好办,可以保持URL地址不变。在新建栏目的“生成选项”里,找到“内容页存放目录”一项。
1,如果以前文章的URL结构是/AAA/BBB/文章id.html,选择“自定义”,输入AAA/BBB
2,下面的“内容页目录存放形式”,选择不设置目录
帝国CMS把栏目下的文章转移到新栏目里,URL地址保持不变.png

剩下就是更新系统各种缓存,更新信息页地址,然后重新生成新的栏目页及下面的文章页。如果没配置错的话,文章的URL是一点也不会改变的。

如果是转移到已存在的栏目下,怎么保持文章URL地址不变? 我之前实现过了几次,当时没有记录到博客里,现在倒搞忘记了。

Centos系统打补丁修复漏洞的命令

Centos升级系统有2个命令,但是,是有区别的。

yum -y update

升级所有包同时也升级软件和系统内核

yum -y upgrade

只升级所有包,不升级软件和系统内核

只要服务器一提示有漏洞什么的,我直接就运行yum -y update,其实这很危险的。很容易就造成整体升级后,应用可能打不开了,因为有的软件对运行环境里各个软件的版本有要求的。

无论用哪个,执行命名前,务必要给服务器做快照备份。

最后,重启生效

reboot 

SQL Server查询数据库中包含某个值的表和字段

网上搜索了下,几乎都是先创建一个存储过程:

CREATE PROCEDURE [dbo].[SP_FindValueInDB]
(
    @value VARCHAR(1024)
) 
AS
BEGIN
    SET NOCOUNT ON;
    DECLARE @sql VARCHAR(1024) 
    DECLARE @table VARCHAR(64) 
    DECLARE @column VARCHAR(64) 
    CREATE TABLE #t ( 
        tablename VARCHAR(64), 
        columnname VARCHAR(64) 
    ) 
    DECLARE TABLES CURSOR FOR 
    SELECT o.name, c.name FROM syscolumns c 
    INNER JOIN sysobjects o ON c.id = o.id 
    WHERE o.type = 'U' AND c.xtype IN (167, 175, 231, 239) 
    ORDER BY o.name, c.name 
    OPEN TABLES 
        FETCH NEXT FROM TABLES 
        INTO @table, @column 
        WHILE @@FETCH_STATUS = 0 
        BEGIN 
            SET @sql = 'IF EXISTS(SELECT NULL FROM [' + @table + '] ' 
            SET @sql = @sql + 'WHERE RTRIM(LTRIM([' + @column + '])) LIKE ''%' + @value + '%'') ' 
            SET @sql = @sql + 'INSERT INTO #t VALUES (''' + @table + ''', ''' 
            SET @sql = @sql + @column + ''')' 
            EXEC(@sql) 
            FETCH NEXT FROM TABLES 
            INTO @table, @column 
        END 
    CLOSE TABLES 
    DEALLOCATE TABLES 
    SELECT * FROM #t 
    DROP TABLE #t 
End

然后再查询:

EXEC [SP_FindValueInDB] '要查询的值'

在使用过程中要注意一个问题:
1,如果这个库里表很多,那么查询速度就很慢
2,sqlserver表带了很多不同的前缀,比如dbo. defdba. officedba. 用你当前的账号查询到某些前缀的表时,极有可能出现对象名 'XXXtablename' 无效。

SQL语句查询某个数据库中某类表或视图

数据库:Sqlserver
SQL语句:

select * from sysobjects where name like 'Sys%' and (xtype = 'U' or xtype = 'V') order by name

如果筛选的表名称中,包含有下划线_,则用下面语句:

select * from sysobjects where name like 'Sys/_%' ESCAPE '/' and (xtype = 'U' or xtype = 'V') order by name

在Sqlserver的like中下划线类似于通配符%,所以无法使用like '%_%'来匹配下划线,使用转义字符escape。

在语句中,当转义符置于通配符之前时,该通配符就解释为普通字符。上面第二个SQL语句中,‘/’为转义字符,第一、第三个‘%’为通配符。