Windows主机开启url重写运行emlog常见问题及解决方案

由于空间商的技术层次不同和IIS6本身URL重写模块的功能不足,在开启url重写之后,会出现诸如url部分或者全部重写无效、真实文件无法访问、url失效等类似技术问题,而这些问题对很多技术知识不足的用户来说会造成非常大的困扰。对于这个情况emlog官方非常的关注,但是这个问题核心根本并不在于emlog,我们也无能为力,但是出于对用户负责的态度,我们总结了一些常见问题的解决方法,特放于此方便用户查询!

在解决方案开始之前,我们需要向大家提一个建议
请大家尽量不要使用IIS6做服务器的空间来运行emlog以免遇到各种疑难的url重写问题

常见问题和解决方案

问题1. 如何知道我的空间是使用的IIS6?
登陆emlog后台,在服务器环境一栏看到Microsoft-IIS/6.0字样的就能确定是IIS6空间了

问题2. 如何测试我空间可以正确实现URL重写?
解决方案:
将下列内容保存为httpd.ini放置在空间的根目录
[ISAPI_Rewrite]
# 3600 = 1 hour
CacheClockRate 3600
RepeatLimit 32
RewriteRule /test.html /index.php [L]
然后请确定 http://你的域名/index.php 是可以访问的
确定后,请访问 http://你的域名/test.html ,如果页面显示的是index.php的内容,那么说明你的空间url重写工作正常

问题2. 我的空间无法正常启用伪静态
解决方案:(依次检查,下同)
请和空间商确认你的空间支持伪静态
请将论坛置顶帖中的IIS6重写规则保存为httpd.ini放置于你的空间根目录
如果仍然无法生效,请联系你的空间客服

问题3. 我的博客访问什么链接都跳转到首页
解决方案:
请确定规则文件的正确
如果仍然无法生效,请联系你的空间客服

问题4. 我的博客空间有其他的程序,访问类似/index.php/post-1.html这样的url无法生效
解决方案:
关闭emlog的重写功能
更换空间

问题5. 访问http://somehost/admin无法进入后台
解决方案:
请访问http://somehost/admin/来进入后台

问题6. 我放在博客目录下的文件(如sitemap.xml、robots.txt)无法访问,访问之后跳转到了博客首页
解决方案:
IIS6 URL重写模块没有在重写规则中提供对url是否为真实文件的判断支持, 所以无论当前访问的url是否为真实文件或目录都会被重写到index.php,这就是为什么访问文件会跳转到博客首页的原因,其他的服务器如Apache、Nginx等在重写模块中都提供了判断文件的接口,所以不会有这个问题.由于无法重写模块无法支持文件、文件夹判断,所以我们只能手动的在规则里面增加你需要访问的文件和文件夹来达到让其可以被访问的目的。
下面我简单的讲一下添加规则教程:
标准的IIS6重写规则如下:
    [ISAPI_Rewrite]
    # 3600 = 1 hour
    CacheClockRate 3600
    RepeatLimit 32
    RewriteRule /robots.txt(.*) /robots.txt$1 [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]

增加文件的规则很简单,格式为:

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]

问题7: 我的空间中有其他的程序也需要伪静态该怎么办?

鉴于IIS6重写模块的功能缺陷问题,如果您对编写规则不熟悉,我们建议您关闭emlog的伪静态以免出现莫名奇妙的问题.
本博客所有文章如无特别注明均为原创。作者:sysdee复制或转载请以超链接形式注明转自 成功志
原文地址《Windows主机开启url重写运行emlog常见问题及解决方案
分享到:更多

相关推荐

发表评论

路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交

网友评论(0)