问题原因:
IIS6 URL重写模块没有在重写规则中提供对url是否为真实文件的判断支持, 所以无论当前访问的url是否为真实文件或目录都会被重写到index.php,这就是为什么访问文件会跳转到博客首页的原因,其他的服务器如 Apache、Nginx等在重写模块中都提供了判断文件的接口,所以不会有这个问题
解决方案:
由于无法重写模块无法支持文件、文件夹判断,所以我们只能手动的在规则里面增加你需要访问的文件和文件夹来达到让其可以被访问的目的。
下面我简单的讲一下添加规则教程。
标准的IIS6重写规则如下:
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteRule /rss.php(.*) /rss.php$1 [L]
RewriteRule /tb.php(.*) /tb.php$1 [L]
RewriteRule /favicon.ico /favicon.ico [L]
RewriteRule /xmlrpc.php(.*) /xmlrpc.php$1 [L]
RewriteRule /wlwmanifest.xml /wlwmanifest.xml [L]
RewriteRule /(t|m)$ /$1/ [R]
RewriteRule /(admin|content|include|t|m)/(.*) /$1/$2 [L]
RewriteRule /install.php(.*) /install.php$1 [L]
RewriteRule /emlog_toolkit.php(.*) /emlog_toolkit.php$1 [L]
RewriteRule /up(d.d.d)to(d.d.d).php(.*) /up$1to$2.php$3 [L]
RewriteRule ^/$ /index.php [L]
RewriteRule /(.*) /index.php/$1 [L]
增加文件的规则很简单,格式为:
RewriteRule /(文件路径) /(文件路径) [L]
上面规则中的(文件或文件夹路径)指的是从你网站根目录算起的文件路径,以sitemap.xml为例,web路径为http://localhost/sitemap.xml,我们在规则中增加一条关于sitemap.xml的规则,
因为sitemap在网站根目录,那么规则应该写为:
RewriteRule /sitemap.xml /sitemap.xml [L]
增加文件夹的规则稍微复杂点,格式为:
RewriteRule /(文件夹路径)/(.*) /(文件夹路径)/(.*) [L]
例如,我在博客空间里上传了一个叫做photos的文件夹,web路径为http://localhost/photos/,里面全部是图片文件,那么把photo文件夹加入规则就应该写为:
RewriteRule /photos/(.*) /photos/(.*) [L]
另外需要注意一点的是你新添加的规则必须放在下面这两条规则之前,否则规则是不会生效的
RewriteRule ^/$ /index.php [L]
RewriteRule /(.*) /index.php/$1 [L]
下面是一个完整的httpd.ini的内容,添加了上面演示的两条规则,这两条规则已经用红色标出,请注意它们的位置,请务必保证你新添加的规则在下面规则中标识为绿色的规则之前
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteRule /sitemap.xml /sitemap.xml [L]
RewriteRule /photos/(.*) /photos/(.*) [L]
RewriteRule /rss.php(.*) /rss.php$1 [L]
RewriteRule /tb.php(.*) /tb.php$1 [L]
RewriteRule /favicon.ico /favicon.ico [L]
RewriteRule /xmlrpc.php(.*) /xmlrpc.php$1 [L]
RewriteRule /wlwmanifest.xml /wlwmanifest.xml [L]
RewriteRule /(t|m)$ /$1/ [R]
RewriteRule /(admin|content|include|t|m)/(.*) /$1/$2 [L]
RewriteRule /install.php(.*) /install.php$1 [L]
RewriteRule /emlog_toolkit.php(.*) /emlog_toolkit.php$1 [L]
RewriteRule /up(d.d.d)to(d.d.d).php(.*) /up$1to$2.php$3 [L]
RewriteRule ^/$ /index.php [L]
RewriteRule /(.*) /index.php/$1 [L]