做过opencms静态导出的人都知道,如果你把opencms的内容静态导出的话,发布路径上都会带上“export\sites\mysite ”,这是opencms默认添加的,怎么才能去掉他呢?我找不到这样的文档,在opencms官方文档上面也没有,网上有一些使用apache rewriteurl的,这实际上和opencms设计的初衷相违背的。
有没有想过,为什么opencms安装好后要通过/opencms/opencms/两个opencms来访问他的后台呢?因为,他的设计人员,认为用户会使用他们的静态导出功能发布网站,但是,往往事与愿违,还有很多人并不知道如何使用,静态导出功能,结果,就出现了使用apache rewriteurl,强行,把在线给录入人员使用的发布内容,展现给用户,而不是,opencms想要给用户的静态导出后的内容。
实际上,这也不奇怪,opencms的文档,和他的功能比较起来,显得太单薄了。我也犯过同样的问题,那好现在我们来纠正这个错误,如何去掉“export\sites\mysite”中的"site\mysite"呢?我们先来看看opencms的源代码:
在
String org.opencms.staticexport.CmsStaticExportManager.getRfsName(CmsObject cms, String vfsName, String parameters)
的第1168行,有以下一段代码:
if (exportNameProperty.isNullProperty()) {
// if "exportname" is not set we must add the site root
rfsName = cms.getRequestContext().addSiteRoot(rfsName);
} else {
// "exportname" property is set
String exportname = exportNameProperty.getValue();
if (exportname.charAt(0) != '/') {
exportname = '/' + exportname;
}
if (exportname.charAt(exportname.length() - 1) != '/') {
exportname = exportname + '/';
}
这里面有一个变量exportname 这个变量实际上是资源属性exportname,你随便找一个资源,右键选择它的property然后点击advance按钮,在属性列表里面就可以看到这个字段,看了上面这段代码,我就在想是不是设置了这个属性,就可以使用这个属性替代原来的"/sites/mysite"呢?
事实证明,我的直觉是对的,修改"/sites/mysite"文件夹的属性,改"export"属性为"myexport",单步调试了以后,发现,最终的linke成了"export/myexport",而不是原来的"export/sites/mysite"。
你可能要问,如果我连"myexport"都打算省掉怎么办呢?很简单设置exportname属性='/'就可以了。这时,所有"/sites/mysite"下的所有资源都将被直接导出到"export/"下面。访问的url也会由原来的"/export/myexport" -> "export/"。比如:原来有个页面"http://127.0.0.1/export/myexport/index.html" -> "http://127.0.0.1/export/index.html"来访问。
接下来,我想改掉"export/",这个名字太不专业了,这个也简单,打开{opencms_home}/WEB-INF/config/opencms-importexport.xml,找到<exportpath>${apache_home}/htdocs/export</exportpath>
其中${apache_home}是你安装apache的路径,把后面的"export"改成你心怡的名字就可以了,或者整个路径全部改掉,改成你想要的路径,opencms就会发布到你新定义的位置,然后再找到“<rfs-prefix>${CONTEXT_NAME}/export</rfs-prefix>”这一行,将其中的export,改成你要的名字,比如:"newexport"。生成出来的静态文件里的链接就会变成"/newexport/myexport/..."
好了,至此,静态导出的,发布路径,以及链接问题都解决了,你可以改成让用户访问,你的静态页面了,这对于减轻你的服务器压力,以及SEO都有好处。