存档

‘聆听技术随笔’ 分类的存档

joomla 1.6在IIS 6.0下的伪静态实现

2012年1月5日 没有评论

我有个站点,是用的joomla 的程序,之前一直放在一台linux服务器上,由于服务器不稳定,打算更换到win的主机上。于是问题就出现了,此台win主机上有多个站点,用的IIS,于是无法安装apache了,默认的.htaccess看来是用不了了,所以之前一直设置的伪静态规则也就无法实现了,如果是这样的话,对SEO方面的损失就很大了,于是就想其他的办法。网上搜索了好久,没有个具体的教程。实在令人头疼。

终于有一天,找到一个相关的文章,于是按照文章介绍的方法,进行了测试,发现可以完美实现joomla的伪静态。

以下是操作步骤:

首先下载ISAPI_Rewrite 3 Lite安装包,这是简化版的,免费提供使用。full版的需要收费的。下载地址:http://www.helicontech.com/download-isapi_rewrite3.htm

1、根据您的系统版本下载好之后,进行安装ISAPI_Rewrite组件,安装期间会自动重启IIS。

2、组件默认安装到了C:\Program Files\Helicon\ISAPI_Rewrite3,在此目录下找到httpd.conf文件进行修改。

3、将网站根目录中的 .htaccess 文件中的内容,复制到 httpd.conf文件中

4、将httpd.conf 文件里刚复制进来的内容中的 #RewriteBase / 的#号去掉,使此段规则生效

5、保存退出,在joomla后台管理中,开启伪静态功能,设置保存即可OK。

按照以上的操作方式,可以完美的实现joomla 1.6 在IIS 6.0下的伪静态,但是经过测试,发现存在一个问题,就是这个规则是应用在IIS全部站点上了,这样一来,如果有其他的php程序的网站,可能会导致错误,于是进行修改一下:

1、将IIS全局的网站属性中,将ISAPI筛选器中的 ISAPI_Rewrite3 删除

2、到使用joomla 的程序站点属性中,添加ISAPI_Rewrite3 的筛选器,可执行文件选择 C:\Program Files\Helicon\ISAPI_Rewrite3\ISAPI_Rewrite.dll

3、重启IIS,大功告成。

ISAPI_Rewrite 3 Lite 这个组件,貌似是不支持单独站点的配置,据说使用 full版的,可以实现单独站点的规则配置,如果谁用过的话,麻烦告知一下!

IIS搭建PHP出现 1%不是有效win32应用程序错误

2012年1月4日 没有评论

今天给一台Win 2003 64位的机器IIS配置PHP出现1%不是有效WIN32应用程序的错误,各处配置都是正确的,只是出现这个。于是search一下,找到解决方法:由于在64位操作系统里,默认配置下,IIS工作在64位模式下,这会让许多32位的应用不能正常工作.此时,可用以下命令启用32位模式:

cscript “c:\InetPub\AdminScripts\adsutil.vbs” set w3svc/AppPools/Enable32bitAppOnWin64 1 

让dedecms的sitemap.html生成在网站根目录

2011年11月24日 没有评论

  很多用DEDECMS做站的朋友,为避免将data目录内的东西随便外泄,在robots中将data目录屏蔽了,但是DEDE默认的网站地图 却是在 data下,屏蔽掉这个文件夹的话搜索引擎就无法抓取到网站地图,这不利于SEO优化,那么有没有好的方法呢,让DEDE生成的网站地图放在系统根目录下面?下面我就给大家介绍一下DEDE网站地图优化方法。

下面是详细的步骤:

1、首先在网站根目录下建立rss文件夹

2、修改/dede/makehtml_map.php文件

将 $cfg_cmspath."/data/sitemap.html";
修改为:$cfg_cmspath."/sitemap.html";
将 $cfg_cmspath."/data/rssmap.html";
修改为:$cfg_cmspath."/rssmap.html";

3、修改/include/arc.rssview.class.php文件

将 $murl = $GLOBALS['cfg_cmspath']."/data/rss/".$this->TypeID.".xml";
修改为:$murl = $GLOBALS['cfg_cmspath']."/rss/".$this->TypeID.".xml";

4、修改/include/sitemap.class.php文件

将以下内容

$typelink = $GLOBALS['cfg_cmsurl']."/data/rss/".$row->id.".xml";
$typelink = $GLOBALS['cfg_cmsurl']."/rss/".$row->id.".xml";

修改为:

$typelink = $GLOBALS['cfg_cmsurl']."/data/rss/".$row->id.".xml";
$typelink = $GLOBALS['cfg_cmsurl']."/rss/".$row->id.".xml";

此时再到网站后台生成网站地图的时候,就会直接生成到网站根目录了。

DEDECMS 列表页面ul li 循环调用

2011年11月22日 1 条评论

之前仿站,在列表页的时候,经常有个问题在困扰,遇到这样的情况应该如何去做调用呢?代码如下:

<div>
<ul>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第一篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第二篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第三篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第四篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第五篇</a></li>
</ul>
<ul>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第六篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第七篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第八篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第九篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第十篇</a></li>
</ul>
<ul>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第十一篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第十二篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第十三篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第十四篇</a></li>
<li><span>2011-08-23 23:10</span><a href="#">测试文章第十五篇</a></li>
</ul>
</div>

终于找到以下代码,将此问题搞定:

<ul>
{dede:list pagesize='24' orderby='pubdate'}
                    [field:global runphp='yes' name=autoindex]
                    $b="</ul><ul>";
                    $a="";
                    if(@me%6==0) @me=$b;
                    else @me=$a;
                    [/field:global]
<li><span>[field:pubdate function="GetDateTimeMK(@me)"/]</span><a href="[field:arcurl/]">[field:title/]</a></li>{/dede:list}
</ul>

dedecms 5.7文章中点击图片进入下一页代码(亲测正常)

2011年11月21日 没有评论

DEDE文章点击图片自动进入下一页的方法,之前找了好多代码,发现都不太好用,今天找到这个代码,亲测可行,于是贴出来给大家分享一下:

修改/include/arc.archives.class.php文件

1、查找 “解析模板,对内容里的变动进行赋值” 在这段话上面添加以下代码。

function ClickPicNext($ismake=1,$aid,&$body)
{
global $cfg_rewrite;
if($this->NowPage!=$this->TotalPage)
{
$lPage=$this->NowPage+1;
if($ismake=0)
{
$body=preg_replace("/<(img|IMG)(.*)(src|SRC)=[\"|'| ]{0,}((.*)>)/isU","点击图片,进入下一页<br/><a href='".$this->NameFirst."_".$lPage.".".$this->ShortName."'>"."\${0}"."</a>",$body);
}
else
{
//对于生成静态页面的情况下使用
$PageList="<a href='".$this->NameFirst."_".$lPage.".".$this->ShortName."'>"."\${0}"."</a>";
//对于动态页情况下使用,我这里用的是静态,于是将下面这行代码注释,如果您的是动态页面的话,则将上面那行代码注释,使用下面这行即可。
//$PageList="<a href='view.php?aid=$aid&pageno=$lPage'>"."\${0}"."</a>";
if($cfg_rewrite == 'Y')
{
$PageList = str_replace(".php?aid=","-",$PageList);
$PageList = preg_replace("/&pageno=(\d+)/i",'-\\1.html',$PageList);
}
$body=preg_replace("/<(img|IMG)(.*)(src|SRC)=[\"|'| ]{0,}((.*)>)/isU",$PageList,$body);
}
}
else
{
$body=preg_replace("/<(img|IMG)(.*)(src|SRC)=[\"|'| ]{0,}((.*)>)/isU",$this->GetPreNext('imgnext'),$body);
}
return $body;
}

2、查找“$this->Fields[$this->SplitPageField] = $this->SplitFields[$pageNo - 1];”,在这段代码下添加以下代码:

if($ClickPicNext){
$this->Fields[$this->SplitPageField]=$this->Fields[$this->SplitPageField];
}else{
$this->Fields[$this->SplitPageField]=$this->ClickPicNext($ismake,$this->Fields['id'],$this->Fields[$this->SplitPageField]);
}

3、查找“$this->PreNext['next'] = “下一篇:<a href=’$mlink’>{$nextRow['title']}</a> “;”在这段代码下添加以下代码:

$this->PreNext['imgnext'] ="<a href='$mlink'>"."\${0}"."</a>";

4、查找“$this->PreNext['next'] = “下一篇:没有了 “;”在这段代码下添加以下代码:

$this->PreNext['imgnext'] ="\${0}";

5、查找到以下代码:

else if($gtype=='next')
        {
            $rs =  $this->PreNext['next'];
        }

在其下面添加以下代码:

else if($gtype=='imgnext')
{
$rs = $this->PreNext['imgnext'];
}

然后保存。重新生成文章即可!

apache开启gzip压缩 给网站加速

2011年11月20日 没有评论

上篇文章介绍了IIS启用gzip页面压缩技术 给网站加速,那么如果我的服务器是apache的环境应该如何操作呢?

在Apache默认的http.conf配置文件中没有开启gzip压缩,apache1.3.x可以用mod_gzip进行优化网页浏览的速度,在apache2中也尝试用mod_gzip,但是配置后确发现网页不能正确显示(空白页),所以改换为mod_deflate。

下面说一下怎样在Apache2下开启gzip压缩:

如果要开启gzip的话,一定要打开下面二个模块.

LoadModule headers_module modules/mod_headers.so
LoadModule deflate_module modules/mod_deflate.so

编辑 httpd.conf 文件,

# 加载deflate模块
LoadModule deflate_module modules/mod_deflate.so

在httpd.conf文件中加入以下内容

DeflateCompressionLevel 3
AddOutputFilter DEFLATE html xml php js css
<Location />
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \\.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary
</Location>

然后保存,重启apache即可!

注:
DeflateCompressionLevel 3    //设置压缩频率,取值范围在 1(最低压缩率) 到 9(最高压缩率)之间,不建议设置太高,虽然有很高的压缩率,但是占用更多的CPU资源
AddOutputFilter DEFLATE html xml php js css     //要压缩的文件类型

IIS启用gzip页面压缩技术 给网站加速

2011年11月20日 没有评论

启用Gzip压缩是在Web服务器和浏览器间传输压缩文本内容的方法。

Gzip压缩采用通用的压缩算法压缩HTML、JavaScript、CSS等静态文件和asp、aspx、php、jsp等动态文件。

压缩的最大好处就是降低了网络传输的数据量,从而提高客户端浏览器的访问速度。

当然,同时也会增加一点点服务器的负担。

通过Windows2003系统设置的方式启用Gzip的突出优点就是效率较高,所以我们直接设置IIS让其支持Gzip压缩。

以下是启用Gzip 压缩的步骤

单击“开始”—“管理工具”—“Internet 信息服务(IIS)管理器”,打开IIS管理器;

在IIS管理器中双击本地计算机,右侧显示计算机中IIS列表,在“网站”上右键选择属性;

打开网站属性界面;

单击“服务”标签,选中“压缩应用程序文件”和“压缩静态文件”,同时根据情况设置临时目录的最大容量,初期可以限制为1G左右;

返回Internet信息服务(IIS)管理器,右击“Web服务扩展”,弹出Web服务扩展菜单;

选择“增加一个新的Web服务扩展(A)”;

在“新建Web服务扩展”框中输入扩展名“HTTPComPRession”,添加“要求的文件”为C:\WINDOWS\system32\inetsrv\gzip.dll,其中 Windows系统目录根据您的安装可能有所不同,选中“设置扩展状态为允许”;

使用文本编辑器打开C:\Windows\System32\inetsrv\MetaBase.xml(建议先备份),在该文件中搜索HcScriptFileExtensions,设置进行压缩的文件后缀名,系统默认的是asp、dll和exe,根据格式增加aspx、php、jsp等,再搜索HcFileExtensions,增加shtm、shtml、js、css、swf、mid、xml、mp3等静态文件格式;

在运行中输入“net stop iisadmin /y”停止IIS服务,运行完成后保存Metabase.xml;

在运行中输入“iisreset”重启IIS服务;

设置完成后,可以打开最知名的验证网站来验证,网址是http://www.pipeboost.com
找到验证窗口Real-Time Acceleration Report,输入网址,单击“Analyze Url”按钮进行验证;

执行验证完成,如果Document Status的状态为ComPRessed,就说明压缩成功了。

如果状态显示为:uncompressed,那么建议检查 gzip.dll文件的权限。

另外,在站长工具上也可以查看到页面是否经过了压缩。地址为:http://tool.chinaz.com/Gzips/

dedecms 5.7 后台广告及版权去除

2011年11月18日 没有评论

新版的dedecms 5.7 版本在后台登陆的时候,以及登陆之后的页面,都留了广告的位置。原则上对我们影响不大,但是细想一下,一旦dedecms的广告服务器被攻陷,广告位的位置被挂上了马,后果可想而知。于是想到去掉它。下面开始行动。

一、去除后台登陆页面广告。

1、用记事本打开/dede/templets/login.htm文件,找到以下代码并删除。

<div><iframe name="loginad" src="login.php?dopost=showad" frameborder="0" id="loginad" scrolling="no" marginwidth="0" marginheight="0" width="100%"></iframe></div>

以上代码是后台登陆框下方的广告。

<div>Powered by<a href="http://www.dedecms.com" title="DedeCMS官网"><strong>DedeCMS<?php echo $cfg_version; ?></strong></a>&copy; 2004-2011 <a href="http://www.desdev.cn" target="_blank">DesDev</a> Inc.</div>
</div>

以上代码是版权声明部分,也可以直接删除的。然后再顺手修改标题部分代码:

<title><?php echo $cfg_softname." ".$cfg_version; ?></title>

修改为:

<title><?php echo $cfg_webname; ?> - 后台管理登陆</title>    最终效果为:网站名称 - 后台管理登陆

2、打开/dede/login.php 文件,找到第42到46行部分代码,将其去掉即可。

if ($dopost=='showad')
{
    include('templets/login_ad.htm');
    exit;
}

并且还要删除对应的”/dede/templets/login_ad.htm”模板文件,这个文件是多余的,官方加的广告链部分。

二、去除后台登陆后默认首页广告

主要去掉的部分为:赞助商链接,开发团队,商业授权查询

1、打开/dede/index_body.php,在文件最末尾处找到如下代码:

<?php
exit;
} else if ($dopost=='showauth')
{
    include('templets/index_body_showauth.htm');
    exit;
} else if ($dopost=='showad')
{
    include('templets/index_body_showad.htm');
    exit;
}
?>

修改为:

<?php
exit;
}
?>

然后,删除/dede/templets/index_body_showauth.htm  和  /dede/templets/index_body_showad.htm  文件即可。

2、打开/dede/templets/index_body.htm,删除如下代码:

<dl class='dbox' id="item8">
            <dt class='lside'><div class='l'>赞助商链接(<a href="http://ad.dedecms.com/ad/" target="_blank">说明</a>)</div></dt>
            <dd>
                <iframe name="showad" src="index_body.php?dopost=showad" frameborder="0" width="100%" id="showad" frameborder="0" scrolling="no"  marginheight="5"></iframe>
            </dd>
        </dl><!--赞助商链接结束-->

以上是 赞助商链接的广告

        <dl class='dbox' id="item5">
            <dt class='lside'><div class='l'>开发团队</div></dt>
            <dd class='intable'>
                <table width="98%">
                    <tr>
                        <td width='25%' height='36' class='nline' style="text-align:right"> 主程序开发: </td>
                        <td class='nline' style="text-align:left">天涯、IT柏拉图、沙羡、蓝色随想、Niap、木匠、cha369</td>
                    </tr>
                    <tr>
                        <td height='36' class='nline' style="text-align:right">界面及交互设计:</td>
                        <td class='nline' style="text-align:left">尐湶細蓅、like、猪头心宇、方域、小王</td>
                    </tr>
                    <tr>
                        <td height='36' class='nline' style="text-align:right">官方论坛协助:</td>
                        <td class='nline' style="text-align:left">感谢以下站长(排名不分先后):疯狂的锤子、木木/阿杰</td>
                    </tr>
                </table>
            </dd>
        </dl><!--开发团队结束-->

以上是开发团队介绍信息。

        <dl class='dbox' id="item2">
            <dt class='lside'><span class='l'>商业授权查询</span></dt>
            <dd>              
                <iframe name="showauth" src="index_body.php?dopost=showauth" width="100%" frameborder="0" scrolling="no" marginwidth="10" marginheight="10" id="showauth"></iframe>               
            </dd>
        </dl><!--更新消息结束-->

以上是商业授权查询模块。

3、后台顶部版权信息及链接主要修改/dede/templets/index_top2.htm 和 /dede/templets/index2.htm 两个模板文件。

4、去掉左栏“系统帮助”,修改模板文件为:/dede/inc/inc_menu.php

apache网站访问日志按天分割

2011年11月17日 没有评论

默认情况下,apache中的网站,访问日志都是在一个文件中包含着的,时间一长,文件会特别大,根本无法打开查看了。于是想到将日志分割一下,类似于IIS的日志,一天记录一个文件。

linux下,在配置站点的时候,日志保存部分这样来填写:

ErrorLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/52listen_error_log_%Y%m%d 86400 480"
CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/52listen_access_log_%Y%m%d 86400 480" combined

windows下的apache,稍微有点不同,按照下面这样来写

ErrorLog "|bin/rotatelogs.exe logs/52listen_error_log_%y%m%d.log 86400 480"
CustomLog "|bin/rotatelogs.exe logs/52listen_access_log_%y%m%d.log 86400 480" common

这样一来,网站访问日志会被apache自带的rotatelogs 工具分割开。在查看以及分析日志的时候,就可以按照时间选取需要的日志来查看了。

apache 使用 .htaccess 导致500错误

2011年11月17日 没有评论

今天在win主机上配置了一个apache+mysql+php 的环境,一切看似正常了。结果将程序转移过来,打开网站的时候,出现了500错误。于是乎查原因:

首先,怀疑的是连接mysql出错了,找出配置文件,修改mysql的连接信息,错误依然出现

然后,看到网站根目录下面有个 .htaccess 文件,于是想到会不会是此文件导致的,先将其改名。再次打开网站,可以正常访问了,但是之前的伪静态的页面,都无法显示了。

找出了问题所在,就好解决了。看来是apache默认装上之后,还是不支持 .htaccess 的,那么开始修改 httpd.conf 文件

首先,找到

#LoadModule rewrite_module modules/mod_rewrite.so

将前面的 #去掉,变成

LoadModule rewrite_module modules/mod_rewrite.so

然后查找 AllowOverride None

将其改为 AllowOverride All

最后,保存httpd.conf 文件,并且重启apache 服务,再次打开网站,一切正常。