ISAPI_Rewrite正式版(非lite版)无效的原因

2010-12-11 19:35| 分类:tech web开发| 标签: | 9,901 次点击

天~已经两个月没写博客了,基本都去Buzz和新浪微博了,博客的更新频率只会越来越低,如有兴趣,可以follow我的新浪微博:http://t.sina.com.cn/tsenfine ,或者follow Buzz:https://www.google.com/profiles/yi.chenfang。我自己也有数月没打开Google Reader了。

因多个web项目需要用到rewrite,而lite版只支持全局的,所以升级了ISAPI为正式第三版,信用卡付款,现在还没没扣款,也还未发注册码。不过有45天试用,先下来用用。

先是备份lite版的httpd.conf文件,然后卸载了lite版的,然后重装。安装好后发现新版确实好用多了,不仅可对单个网站rewrite,而且可对单个文件夹下的文件rewrite,方法跟apache下的.htaccess差不多。但测试了下却发现原来的rewrite规则全都失效了。

于是找原因,首先在自己博客上找,没想到在2008年12月10日和2009年年11月12日都出现过类似的问题,真让我怀疑江恩说的“循环”的存在 : )

ISAPI Rewrite/IIS Rewrite无效的可能原因  2008-12-10

新版ISAPI Rewrite (Rewrite3_0067_Lite)无效的原因 2009-11-12

ISAPI_Rewrite正式版(非lite版)无效的原因 2010-12-10

首先是按以前两篇博客的内容检查了一遍,从IIS的“web服务扩展”到NTFS权限设置都检查过,又是重启IIS又是重启服务器的,但仍旧不行。后来看安装文档中的帮助文件:

一、首先应该检查ISAPI rewrite是否有在运行,方法有两种,一种是根据安装文档中的帮助来检查:

Put the following lines into httpd.conf file:

RewriteLogLevel 9
LogLevel debug

This will create error.log and rewrite.log files by default in the installation directory. If log files are created, this will indicate that ISAPI_Rewrite is running.

另外一种是随便写个规则看有没有在执行来检查。

二、我检查出来是有在运行的,那么打开Helicon Manager.exe,可以直接修改站点根目录下的.htaccess,但我却忘了清空全局的httpd.conf,导致后来调试问题一堆。正确的方法是应该清空全局的,然后把需要的规则写入站点目录下的.htaccess下。

当然我两个站点,一个是可以的,一个却不行,看了帮助文件夹下的:

If rules are working in httpd.conf file but not in other sections or .htaccess files, make sure to include RewriteEngine on directive in every section and .htaccess file. Also remember that rewriting base inside .htaccess files by default is different from httpd.conf. ISAPI_Rewrite automatically strips the local directory prefix from the path when in .htaccess or <Directory> section and applies rules only to the remainder. So if your rules start with a ‘/’ character, this should be removed in .htaccess file in the root folder of web site.

原来是规则不一样,比如像以下这种

RewriteEngine on  
RewriteRule /(\d{1,20}) /product.jsp?pid=$1

需要改成:

RewriteEngine on

RewriteBase /
RewriteRule (\d{1,20}) /product.jsp?pid=$1

这可以去参考帮助文件中的Example。

总结,像这种比较普遍的错误,看软件自带的帮助CHM还是非常有用的,比google出来的更方便更权威。

杀软文件隔离导致的程序问题

2010-01-01 1:14| 分类:web开发| 标签: | 2,016 次点击

今天下午访问网站首页出现了系统弹出登陆框输入用户和密码的提示。怀疑是ajax载入的那个页面的问题,查了下,果然是,删了调用这个页面的js就没事了。

但是这个页面(createhtml.asp)是什么问题呢?因为我刚刚删了guest这个系统账号,而这个文件的作用又正好是生成一个html,所以我以为是权限设置问题,但查了一下都没有问题,都有everyone权限。

直接访问该creathtml.asp会出现以下提示:

您未被授权查看该页 您不具备查看该目录或页面的权限,因为访问控制列表 (ACL) 对 Web 服务器上的该资源进行了配置。

后来慢慢的通过改代码调试发现,一旦其中一个asp引用一个叫做func.asp的文件就会出现那个登陆框,那么肯定就不是这个文件本身的问题,而是其中include的那个func.asp的问题,我马上联想到前面用360杀毒查到了一个提示是盗号木马的asp文件,正是这个func.asp,但其实这asp是自己写的,还是安全的,我当时并没有隔离或作处理,但谁知道360杀毒会怎么处理呢?

果然,这个文件是打不开的,提示“文件操作失败,禁止访问”。我后来好像把360杀毒的实时防护改为“严格防护”,可能就是这个原因吧。

解决办法,现在改360杀毒的实时防护设置已经没用了,只能先把这个文件当做病毒杀掉,再复制一份这个文件的拷贝到源文件夹,这样就可以正常访问了,网站也就正常了。

总结:

1、删guest账号不影响网站访问,反正都已经是everyone权限了。

2、杀软杀毒后如果查到有网站的程序文件,可能会对网站程序文件做一些访问限制,会导致程序不能正常使用。

windows+IIS下完美设置wordpress伪静态

2009-12-26 22:30| 分类:wordpress 博客维护| 标签: | 7,902 次点击

不得已把wordpress迁移到了wimp平台下,seo强迫的我自然要求链接友好,但IIS6没有自带rewrite功能(据说IIS7会好点,wordpress可默认支持IIS7下的URL重写)。如果用ISAPI Rewrite得自己写正则匹配,还不一定能匹配的成功,于是我找到了一个更方便的方法,堪称完美。

这个方法是通过IIS的自定义404页面实现,首先在wordpress根目录下新建一个wp-404rewrite.php,然后把下面的代码复制到里面去:

<?php
// This is the default file for the site. Usually index.php
$default = 'index.php';

// The name of this file.
// Set this value for the URL in Custom Error Properties of your website in IIS.
// Goto: IIS Manager > Websites > [Site Name] > Properties > Custom Errors >
// 404 & 404;2 & 404;3 > URL (Requires a '/' prefix in IIS).
$thisfile = '404-handler.php';

$_SERVER['ORIG_PATH_TRANSLATED'] = str_replace($thisfile, $default, $_SERVER['ORIG_PATH_TRANSLATED']);
$_SERVER['SCRIPT_FILENAME'] = str_replace($thisfile, $default, $_SERVER['SCRIPT_FILENAME']);
$_SERVER['ORIG_PATH_INFO'] = str_replace($thisfile, $default, $_SERVER['ORIG_PATH_INFO']);
$_SERVER['SCRIPT_NAME'] = str_replace($thisfile, $default, $_SERVER['SCRIPT_NAME']);
$_SERVER['PHP_SELF'] = str_replace($thisfile, $default, $_SERVER['PHP_SELF']);
$_SERVER['PATH_INFO'] = false;

$qs =& $_SERVER['QUERY_STRING'];
$ru =& $_SERVER['REQUEST_URI'];
$pos = strrpos($qs, '://');
$pos = strpos($qs, '/', $pos + 4);
$_SERVER['URL'] = $ru = substr($qs, $pos);
$qs = trim(stristr($ru, '?'), '?');

// Required for WordPress 2.8+
$_SERVER['HTTP_X_ORIGINAL_URL'] = $ru;

// Fix GET vars
foreach ( $_GET as $var => $val ) {
  if ( substr($var, 0, 3) == '404') {
    if ( strstr($var, '?') ) {
      $newvar = substr($var, strpos($var, '?') + 1);
      $_GET[$newvar] = $val;
    }
    unset($_GET[$var]);
  }
  break;
}
include($default);
?>
在IIS里的“自定义错误”Tab处添加修改404的错误指向,“消息类型”选择“URL”,地址填上:/wp-404rewrite.php(我的是/wp-404-handler.php),然后访问博客主页,看看各个页面是不是可以了?

我用firebug和google webmastertools查看状态,都是200,并非404,所以不用担心google不收录这样的页面。

以上方法参见这里(英文):

http://www.ikailo.com/94/url-modrewrite-workaround-iis-60/

http://tech.einaregilsson.com/2007/07/30/pretty-wordpress-permalinks-on-iis/

(以下是写给自己看的):这个方法对我来说还会有点问题,我配置好后发现三个博客的categary不管是否中文都可以访问,比如“http://blog.linggan.com/tag/电子商务”,但日期分类页面和分页页面均无法访问。后来发现其他人用这个方法,却可以访问日期分类。观察了下原来他们的链接里多了一个斜杠号“/”,只要我在日期分类和分页链接后加个斜杠,也可以访问了。但发现有个人的博客用http://wp.feiyan.info/page/1 这样的链接也可以访问,我意识到不是斜杠不斜杠的问题。而是自己的配置问题,突然意识到有可能是以前写的rewrite规则冲突!原来我以前写过facepk.com的rewrite规则,凡是后面是数字结尾的都会进行匹配,而免费的rewrite是全局生效的,会让所有IIS下的网站都生效,所以就导致这个404的问题了!

解决办法,去掉facepk.com的rewrite规则,facepk.com流量很低,也不需要seo,不过这里做个备份:

RewriteRule /facepk/(\d{1,5})$ /facepk/facepk\.asp\?id=$1

RewriteRule /(\d{1,5})$ /facepk\.asp\?id=$1

另外,之所以前面tag/xxx可以访问,也是因为以前就在httpd.conf中加了以下两句,现在可以删了!

RewriteRule /tag/(.*) /index\.php\?tag=$1

RewriteRule /cat/(.*) /index\.php\?category_name=$1

现在httpd.conf里就没有东西了。

之前我还试过用ISAPI组件的方法来设置友好链接,但一直没设置成功。

IIS下的Wordpress URL重写组件:URL Rewriting for WordPress wp_url_rewriting:URL Rewriting for WordPress under IIS (V 2.1)

WordPress URL Rewrite | WP URL 重写组件WordPress URL Rewrite v1.0 for 32bit Windows (x86)

WordPress在Win-iis中的完美rewrite实现方法http://code.google.com/p/wp-url-rewriting-on-iis/downloads/list

博客从Lamp平台转移到Wimp平台

13:51| 分类:wordpress| 标签: | 4,809 次点击

我之前的博客托管主机商门户通因为最近的整顿把我的空间关闭了,连他们的主站www.menhutong.com.cn都无法访问了,其实在此之前已经关了好多次了,只是这次最为彻底。按官方给出的数据库备份方法,我第一步——备份FTP服务器都无法登陆。于是前天联系了他们客服,客服也不知道什么时候会恢复,但数据肯定是安全的,只是机房现在关闭无法取回数据。今天又登陆了虎翼的管理后台,发现管理后台已经停了,但给出了一个FTP的地址,于是登陆,发现多了一个database文件夹,里面都是.frm、.MYD、.MYI的mysql备份文件。

赶紧下载下来,用phpmyadmin新建一个数据库,比如blog,然后到my.ini里查看一下自己的mysql数据库文件夹在哪里,我的是:C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1\data  然后把下载下来的数据放到这个blog文件夹里,覆盖。即可在phpmyadmin那看到导入的数据了。(因为从Dreamhost转移到门户通后,每个用户只分配一个数据库,所以我把几个wordpress博客的数据合并到一个数据库里,以不同的表前缀分辨)。

然后在IIS中一个个地添加博客站点,注意程序目录要开启everyone权限,否则提示找不到页面,且在“配置-映射”那要加上.php的映射。ISPAI筛选器那倒可以不添加PHP程序。默认文档加一个index.php。

然后配置几个博客的wp-config.php,博客主页即可访问,但因为是wimp平台,url重写有点问题,所以尽主页和tag页面正常,其他页面都不行,于是配置了一下windows+IIS下的URL Rewrite,博客即可正常访问了,这是wimp平台下的第一篇日志。下一篇写写怎么在windows+IIS下配置wordpress的URL rewrite。

phpmyadmin安装错误图解

2008-12-19 3:57| 分类:tech 服务器| 标签: | 5,402 次点击

phpmyadmin安装很简单,只需把phpmyadmin的程序代码解压放入网站根目录下的phpmyadmin文件夹中即可。然后复制config.sample.inc.php,重命名为“config.inc.php”。文件config.inc.php是phpMyAdmin的配置文件,上传服务器时必须上传该文件。

修改phpMyAdmin连接MySQL的用户名和密码。寻找到代码行:

// $cfg[‘Servers’][$i][‘controluser’] = ‘pma’;
// $cfg[‘Servers’][$i][‘controlpass’] = ‘pmapass’;

将“//”注释号删除,同时输入MySQL中配置的用户名和密码(远程服务器的请联系你的空间服务商),比如:

$cfg[‘Servers’][$i][‘controluser’] = ‘root’;
$cfg[‘Servers’][$i][‘controlpass’] = ‘******’;

如果需要通过远程服务器调试使用phpMyAdmin,则需要添加blowfish_secret内容定义Cookie,寻找到代码行:

$cfg[‘blowfish_secret’] = ”;

设置内容为COOKIE(任意字母)

$cfg[‘blowfish_secret’] = ‘xxx’;

配置好后可能出现以下几个错误:

一、没法登录,或者试几次后才可以登录。

image

注意,在win2003下总是出现这个提示,应该是IE没有设置好,但如果这么提示后不理他,定位鼠标到地址栏,然后按下Enter键就可以登录了。我在Internet选项里设置为如下也不行,不知道是哪个地方出错了。

image 

二、提示:“无法载入 mcrypt 扩展,<br />请检查 PHP 配置”

image

这是php配置的问题,需要做两个步骤:

1、将libmcrypt.dll移动到C:\windows\system32目录中
2、去掉C:\windows目录下的php.ini文件中;extension=php_mcrypt.dll前面的分号

然后重新启动IIS即可,这里并不是权限设置的问题,mysql程序文件夹属性只需要默认的Administrator和System权限即可。

三、提示:“没有发现 PHP 的扩展设置mbstring, 而当前系统好像在使用宽字符集。没有 mbstring 扩展的 phpMyAdmin 不能正确识别字符串,可能产生不可意料的结果.”

image

这仍旧是php的配置问题,解决办法:去掉C:\windows目录下的php.ini文件中;extension=php_mbstring.dll前面的分号

四、我进入phpmyadmin时还提示:

image

应该是php中的mysql库版本与mysql版本不一致的问题,没有大碍,就不解决了。

windows2003下安装MySQL

3:46| 分类:web开发 服务器| 标签: | 5,128 次点击

前面提到我在Windows2003安装IIS+PHP,为了搭建wimp(windows+IIS+mysql+php)现在需要安装mysql,mysql如果全手动安装的话太复杂了,所以我选择了用win32 exe自动安装,mysql.com上下载太麻烦也慢,所以就上mysql.cn下载了:mysql-5.1.30-win32.zip,一步步安装下来。

 

image23

image26

image32

image35

image38

image41

image44

image47

 

image50

 

image

image

360会提示新增一个服务,允许便是。

image

 

如果想修改刚才的设置,可以在开始菜单的MySQL Server Instance Config Wizard里重新设置一遍,也可以用这种方式修改mysql数据库的密码。默认用户名是root。配置好后可以在开始菜单的MySQL Command Line Client输入密码执行mysql命令。

而我的目标只是把wordpress环境配置好,需要导入以前空间上的wordpress数据库,因为我对phpmyadmin比较熟悉,所以需安装一下phpmyadmin来操作数据库。下一篇文章会提到windows2003安装phpmyadmin中遇到的问题。

以下有几个教程不错:

MySQL安装图解[组图]
图解MySQL数据库的安装和操作:这里就是手动安装

Windows2003安装IIS+PHP+MySQL图解(wimp平台搭建)

2008-12-18 18:08| 分类:服务器| 标签: | 7,091 次点击

php的安装方式有很多,不过因为是在服务器上使用,所以我要求:

1、不用自动安装的exe(这样安装完全不知道系统被加了什么东西,有没有被添加服务,强烈建议抛弃此方式)
2、不修改环境变量(修改环境变量往往是为了在升级php时比较方便,但在服务器上为了一个使用php就修改环境变量太不合算了)

最终选定的方法是手动安装。

一、安装php程序所需文件。

先去官网php.net下载最新版的php-5.2.8-Win32.zip,然后在服务器上解压于C:/php下,并且在php文件夹下添加everyone用户组(这里权限设置是必须的,否则配置好不能正常运行)。

image

在php文件夹下找到php.ini-recommended,复制一份并命名为 php.ini,修改php.ini中的两个地方:

1、找到;extension=php_mysql.dll,去掉前面的分号。
2、找到extension_dir = "./",改为extension_dir = "C:/php/ext/" (C:/php/ext/为ext子目录的绝对路径)

然后把php.ini复制到Windows目录下面,把libmysql.dll复制到System32目录。

至此为止,php程序所需要的文件都有了。

二、配置IIS使之支持php。

资源管理器中新建一个目录作为网站目录,权限中添加everyone组。

添加筛选器:IIS中新建一个网站,打开属性对话框,选择ISAPI筛选器选项卡,添加一个名为php、可执行文件为php目录下的php5isapi.dll的筛选器(ISAPI Filters),如图:

image

然后点击“主目录”,修改“执行权限”为“纯脚本”:

image

添加映射:继续点击“配置”,在映射选项卡那添加一个扩展名为.php,可执行文件为C:\php\php5isapi.dll的映射,如图:

image

添加服务扩展:在IIS的“web服务扩展”里添加一个扩展,扩展名是PHP,要求的文件就是php5isapi.dll的路径,选中“设置扩展状态为允许”。

image

至此php已经配置成功,你可以在网站根目录下写一个php信息查看的文件phpinfo.php:

<?php
phpinfo();
?>

即可用http://localhost:80/phpinfo.php查看了。无需重启IIS,更无须重启服务器。

注意:期间有两个地方需要设置权限,如果这两个地方权限没设置好的话则php页面无法正常显示,分别是:

1、添加php目录的everyone权限
2、添加网站程序所在目录的everyone权限。

在windows2003 IIS中安装SMTP服务器

2008-12-17 17:49| 分类:web开发 服务器| 标签: | 11,433 次点击

上一篇日志中我测试了几个免费企业邮箱的SMTP服务,最终结论是都不可行,只能自己搭建一个SMTP服务器。这里我以自己使用的windows2003为例,记录一下配置的过程。

一、组件设置:

win2003中默认是不安装SMTP服务的,所以得添加这个SMTP Service服务。如图:

image

把这里的SMTP Sevice打上勾

image

之后选择安装文件盘的位置(我是重新下载了一个系统,然后解压,直接定位到这个i386文件夹中),点击确定即可安装了,如果有再弹出则按同样的方法。安装完360会提示新增系统服务。

二、IIS设置:

安装完后无需重启,IIS中会多了些内容:

image

右击属性,可以看到以下选项,按照以下图示进行配置即可:

image 

 image image

在“连接”那里默认就是“仅以下列表除外”,而在“中继”那里默认是“仅以下列表”,所以必须修改一下(事实上只修改了这一个地方,其他地方默认的即可),否则会出现以下情况:

OE发送邮件到test@xingta.com,一直提示“正在验证身份”,然后又提示:

image

至于下面的“域”则可以不用添加,因为我们只是把这台服务器作为SMTP邮件发送服务器,而不需要收邮件。

image

按CSDN上有人说的:哪位朋友在IIS里面设置过SMTP虚拟服务器,并成功利用SMTP虚拟服务器发送过邮件

1,你先把SMTP组件安上,  
  这样,在服务和应用程序就可以看到默认SMTP虚拟服务器了。  
  右击,属性,这里主要要改三个地方,一个是访问里的,访问控制,选匿名访问,还有连接里面,选项成仅以下列表除外,然后在传递里的出站安全里,也选匿名访问,最后在安全里,加个可以使用这个SMTP的用户,服务器端就设好了。  
  2,客户端比如用OE来发,在SMTP服务器里选你刚才建立好的服务器,用户名和密码都输入好,就行了。这个速度发起来快,而且附件没有限制(当然要邮箱能放下哈),其他差不多没什么了。前一阵子刚好研究过。呵呵。。
  

而他所说的都是默认的设置,那都可以不用作任何设置即可,但我测试了确实不行,必须在中继设置那里选中“仅以下列表除外”,而命名下面都已经“忽略上表”了,不知道为何。

三、OE中设置

OE是用来测试SMTP服务器的。你也可以用ASP邮件发送程序如jmail或者一些CMS的后台(后台自带邮件程序)来测试。

 

image

最终配置后如下:

image image image image

image 默认就是这样的。

没有截图的地方保持默认即可。因为刚才在IIS中并没有设置登录的用户名和密码,所以此时你的服务器就是公用的无需权限的SMTP发送器,“我的服务器要求身份验证”这项打不打勾都可以。

然后即可用OE发信了,邮箱里都可以收到(这里显示的邮箱是为了防止spam,我用自己的Gmail收件):

image

测试成功。我同时也测试了用这台服务器上的一个CMS后台的jmail发送程序发送,无需填写密码,只需填写站长信箱和SMTP服务器地址即可发送邮件。

四、添加权限

这样子这台SMTP服务器显然不够安全,很容易被垃圾邮件利用(防止自用的IIS SMTP被垃圾邮件利用),所以需要添加一些权限设置。

为了让这些配置在以后的更换IP时不需要重新设置,尽量用127.0.0.1来代替实际IP地址,所以先把SMTP的IP地址设置为“全部未指定”

image

然后在连接里设置:

image
在OE里也把SMTP服务器改为127.0.0.1

image

这样子在OE中即可正常发送邮件。而在装在这台服务器上的ASP jmail程序上设置SMTP服务器为127.0.0.1,密码不用设即可发送邮件。而且垃圾邮件商无法连接到这台SMTP服务器。

 

注:配置过程中参考了 http://net.zdnet.com.cn/network_security_zone/2008/0605/908860.shtml,以下为引用:

“常规”选项卡主要设置IP地址,单击IP地址下拉项选择“127.0.0.1”,表示指向本地计算机IP地址,其他项使用默认即可。如果你是局域网接入,拥有固定IP地址,那么IP地址就应该选择相应的地址。

“访问”选项卡中设置访问权限。单击“身份验证”,选择“匿名访问”,表示任何用户都可以发送,其他两项不用选择;单击“连接控制”中的“连接”和“中段限制”中的“中断”,选中“仅以下列表除外”,表示可以许接入所有用户的访问。

“邮件”选项卡中设置邮件传输条件及限制,“限制邮件大小为”等四个选项可以使用默认值,无须更改;

“将未传递报告的副本发送到”可将发送不成功的邮件返回发件人,并且写明不成功的原因;“死信目录”设置没有发送成功的邮件被存放的位置。

“传输”选项中设置邮件传递时间,这里不用修改,使用默认值;“LDAP路由”选项用来指定服务器使用的目录服务器标识和属性,这里也不用启动它。

“安全”选项中设置使用发送服务器的有权用户,默认用户是“Administrators”,你可以单击“添加”添加使用用户。

打开Outlook Express,选择“工具→账号→邮件”,选中帐号点“属性”,在“服务器”标签下的“发送邮件(SMTP)”中输入“127.0.0.1”,即本机地址(如图3),“我的服务器需要身份验证”不选择。

测试SMTP服务器未必用OE,这里还有几篇测试SMTP的文章(我都没试):

Telnet到端口25以测试SMTP通信
在Windows Server 2003中手动测试 SMTP 服务(也是telnet)
如何設定 IIS SMTP Service 以支援發信功能(使用 DocuPack 中的 SMTP_Tester 來進行測試)
不用SMTP服务测试邮件代码[译](不知道说的是什么意思)

ISAPI Rewrite/IIS Rewrite无效的可能原因

2008-12-10 6:36| 分类:服务器| 标签: | 8,174 次点击

对SEO的追求有点强迫的症状了。于是用上了ISAPI Rewrite,ISAPI_Rewrite是一个强大的基于正则表达式的URL处理引擎,我安装的是官方的ISAPI_Rewrite3_0058_Lite.msi 免费版。免费版与收费版的主要区别是:“No support for distributed .htaccess configurations, directory and web site level configurations. Only one global httpd.conf configuration file will be loaded from Lite version installation folder.”

安装运行后,打开管理工具中Internet信息管理(IIS管理),在网站单击右键选属性,就可以看到ISAPI_Rewrite已经被加入到了ISAPI筛选器中。

按照默认安装的位置,可以在 C:\Program Files\Helicon\ISAPI_Rewrite 找到 httpd.ini 在此文件中输入Rewrite的规则即可。

正常情况下,修改rewrite规则不需要重起IIS,在为Apache编写的Rewrite的规则中,通常把

<IfModule mod_rewrite.c>
RewriteEngine On RewriteRule ^(.*)/archiver/([a-z0-9\-]+\.html)$ $1/archiver/index.php?$2 </IfModule>

其中黑体的部分去掉即可成为ISAPI Rewrite的规则。

但在我的服务器上,调试了很久都调试不出来效果,不清楚到底有无加载这个筛选器,于是我在虚拟机上又试了试。一次便试验成功了,证明是我的服务器其他地方的配置问题,看到IIS下安装配置ISAPI Rewrite,实现asp的静态化的一句话:“默认是装在C:\Program Files\Helicon下,要注意的是这个目录everyone要有读取权限。”才恍然大悟。

因为对系统盘的权限设置过分严格,所以导致新安装的组件都没有everyone权限,包括这里的Helicon文件夹,所以无法正常运行ISAPI Rewrite。但我添加了everyone的读取权限以后,URL Rewrite仍旧没有生效,又找了很多原因,直到最后只重启了一下变成功了。原来更改了组件的权限之后需要重启IIS。现在总结下:

ISAPI Rewrite无效/ISAPI Rewriterule无效的几个可能原因:

1、最可能的原因:C:\Program Files\Helicon没有开放everyone组的读取权限。

2、其次可能原因:C:\Program Files\Helicon已经开放everyone组的读取权限,但没有重启IIS。

2、不可能的原因1:虽然URL Rewrite功能看起来像是新建了目录,但实际上网站程序所在目录对于everyone组只要有普通的读取权限,并不需要有写权限。只要网站能被访问就不是这个网站权限设置的问题。

4、不可能的原因2:不需要像网上那么多的教程那样在IIS中做其他设置(在每个站点都添加了ISAPI Rewrite的ISAPI筛选器,对于这个免费版,安装完即可在也只能在全局范围内生效。所以不需要对每个站点进行设置。

改了权限后,必须在服务里重启一下IIS服务。但我在虚拟机里面没有任何重启操作(安装完后应该有一次自动的重启)。怎样判断何时重启呢?我有个粗略的方法,IIS对于是否要重启的策略可能是这样:对组件访问权限的更改,要在重启后才能生效;而对组件配置的更改(如httpd.conf)则不需要重启即可生效。在我的虚拟机中刚安装后ISAPI Rewrite程序目录的设置和权限就已经是足够开放的了,而且之后没有更改过权限,所以才不需要重启。

实际上,URL重写还有另外一个软件:IIS Rewrite,因为该软件主页的PR值居然是0,所以就没试过这个软件。接下来学习一下正则表达式,好尽快做出效果。

Windows 2003安装并注册aspjpeg(Persits.Jpeg)组件

1:00| 分类:服务器| 标签: | 5,091 次点击

1、先到官方站点下载aspjpeg组件:http://www.aspjpeg.com/download.html
2、安装,注册码17361-38566-42221
3、无需注册,探针已经提示支持该组件了。(不知道为啥这个组件不需要注册)
4、动网论坛等需要此组件的地方即可马上使用。
5、实际上应该还要修改一下aspjpeg所在文件夹和要添加水印的图片所在文件夹的相关权限。但因为aspjpeg和aspupload同为persit公司的产品,在同一文件夹下,所以权限已经设置过了,见《Windows 2003安装并注册aspupload组件》,而一般要添加水印的图片都是上传的图片,所以这个图片文件夹也正好是设置过权限的,所以就不必再次设置。

Windows 2003安装并注册aspupload组件

2008-12-09 23:27| 分类:服务器| 标签: | 6,058 次点击

刚才访问自己一个站的上传页面,出现了以下错误:

Server 对象 错误 ‘ASP 0178 : 80070005’
Server.CreateObject 访问错误
/facepk/upload/step2.asp,行 14
检查权限时,对 Server.CreateObject 的调用失败。拒绝对此对象的访问。

这个页面是我以前写的,用到了aspupload组件,刚刚把虚拟空间上的站点搬到了服务器上,看来是服务器上没装这个aspupload组件的缘故,于是安装并注册了这个组件,具体步骤如下:

1、下载安装组件,我用的是AspUpload v3.0.0.5 特别版,一步步安装下去,中间需要输入SN,而安装包里自带了。估计“特别版”就是“破解版”的意思。

2、注册组件,打开他的说明文档START.html,发现有误:

说明文档中提到的注册语句是:regsvr32 c:\winnt\system32\aspupload.dll,而实际上默认安装的已经不是这个位置了。安装在c:\Program Files\Persits Software\AspUpload\ 下,所以必须输入:regsvr32 "c:\Program Files\Persits Software\AspUpload\Bin\aspupload.dll" 注册(必须有引号),如图:

image

image

3、修改组件所在目录权限设置:因为我对C盘的权限设置比较严格,所以注册成功后不出所料还是错误页面,这时应该如前面的《Windows 2003安装并注册jmail组件》的所说的,先更改Persits Software的权限,增加一个everyone组,然后刷新,错误就立即消失了。但这次不能删掉everyone组,否则会再次出现同样不能创建对象的错误。

image

4、因为这个aspupload组件不同于前面的邮件发送组件,这里是需要写入文件夹的,所以必须修改一下要上传的文件夹的权限。为了安全考虑,我只把需要上传图片的文件夹权限改了一下(把“修改”那项打钩即可),共有四个文件夹:/bbs/uploadface、/bbs/uploadfile、/bbs/PreviewImage、/facepk/face、/facepk/facebefore、/facepk/music(对于动网论坛,做到这一步还不够,因为上传时如果有用到水印,还会提示:

“Microsoft VBScript 运行时错误 错误 ‘800a01ad’
ActiveX 部件不能创建对象: ‘Persits.Jpeg’
/bbs/inc/Dv_ClsMain.asp,行 43”

我开始时没看清,一直以为是上传的组件错误了,原来是水印的组件。同一家公司的。(我自己写的程序即便没有权限也不会报错,因为On Error Resume Next,这点我下面日志会提到,浪费了我很多时间)

image image image

此文没有任何技术含量,纯属记录备忘,后面还会有一篇《Windows 2003安装并注册aspjpeg组件》­ :mrgreen:

Windows 2003安装并注册jmail组件

2008-12-04 16:29| 分类:服务器| 标签: | 12,398 次点击

一、首先下载jmail最新免费版:JMail 4.5下载

二、安装jmail:把JMail45_free.msi上传到服务器上安装,下一步下一步即可。为了今后备份方便可以安装到C盘。

三、注册jmail:在运行里输入:regsvr32 “C:\Program Files\Dimac\w3JMail\jmail.dll”

image

会提示注册成功即可。

image

四、修改目录权限:

此时用探针探测可能仍然提示不支持jmail组件。情况如同这里:win 2003 服务器 安装 Jmail 发信组件,安装成功,没有问题,但是用探针探测,却提示未安装

我估计是由于C盘program files的目录权限设置所致。不用重新启动,修改Dimac的目录权限,增加一个everyone组,然后刷新探针页面,马上就可以看到支持jmail.SMTPMail的Jmail邮件发送了。

当然不能让这个目录这么不安全,所以我们要接着删掉everyone组(所以实际上只是中间改了一下权限,后来又改回来了),探针仍然提示支持jmail。
Update:必须一直开放着everyone组权限,否则过后(可能是重启后)又会提示不支持该组件。

现在就可以正常发送邮件了。

注:当然,除了jmail组件的安装和注册正确外,你还必须设置好你的SMTP服务器,我刚开始时用Gmail的SMTP也不行,后来用另外一个站点上可以正常使用的搜狗企业邮局邮箱的配置就可以了。

搜狗/Gmail的SMTP配置:
要显示的发送邮箱:可任意设
服务器地址:smtp.mail.sogou.com/smtp.gmail.com(gmail的这个我没有成功发送过邮件)
SMTP登录用户名:你在搜狗或者Gmail的登录帐号。
SMTP登录密码:你在搜狗或者Gmail的登录密码。

后来看到:请问我用Gmail邮箱可以使用Jmail发信吗 提到:

一、GMail存在smtp。其地址为:smtp.gmail.com
二、GMail的smtp要求SSL的安全链接
三、GMail的smtp端口号不是25是465
Jmail的发信端口默认是25,不太清楚它能否支持自定义发信端口,如果不支持,那么它就不能支持GMail了。
另外Jmail不支持SSL安全链接,这也使它根本不可能使用GMail的smtp服务。

而我用的是jmail的免费版本,所以是不可能用Gmail的SMTP服务了,但帖子中的“看来用Gmail作为发件地址是不行了”这句回复有错,仍然可以用Gmail作为发件地址,只需把“要显示的发送邮箱”设置为Gmail的地址即可,但我测试过有些问题。

第一项“要显示的发送邮箱”虽然可以任意设,但最好让要显示的邮箱地址与SMTP的登录地址一样,这样子才可以立即收到邮件(用Gmail邮箱测试),否则会延缓几分钟或者直接就收不到邮件。本想如果这里可以任意设的话,那么我只需要修改这一个地方,以下三样都不修改即可,就可以实现用任何地址发信了。但测试了四封邮件,只收到一封而且延缓了几分钟,另外三封都没有收到(也不在spam中),发送的页面也响应了很久才提示发送成功。但一旦改为与SMTP登录用户名一样的地址,不但服务器发送的页面响应速度快,很快就提示发送成功,而且Gmail里也马上收到邮件。