如何配置CFWheels以在http://mydomain.com/sitemap.xml显示以下XML?
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<-- I'll add the <url> tags dynamically here later -->
</urlset>
我已从web.config
文件中删除了“sitemap.xml”。
在此之后,我不确定如何创建controller
和view
。我应该在“views”文件夹中创建“sitemap.xml”文件夹,然后添加“index.cfm”文件,然后添加上面的XML吗?
我应该在“controllers”文件夹中创建“sitemap.xml.cfc”文件吗?控制器文件应该包含什么?
看起来应该是这样的吗?
<cfcomponent extends="Controller" output="false">
<cfscript>
function init(){
// Let CFWheels know what type of output this controller can 'provide'
provides("xml");
}
function index(){
}
</cfscript>
</cfcomponent>
我是否需要在routes.cfm中添加一个条目?
答案 0 :(得分:2)
您的控制器的index()
方法看起来应该是这样的。它存储在controllers/Sitemap.cfc
。
function init() {
// Grab data about URLs from model or build an array of structs to pass to the view
urls = model("page").findAll(); // This line is just an example
// Call `renderWith()` to instruct Wheels that this requires a special content-type
renderWith(urls);
}
您在views/sitemap/index.xml.cfm
的视图可以生成所需的XML:
<cfoutput>
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
#includePartial(partial="url.xml", query=urls)#
</urlset>
</cfoutput>
然后,您可以在views/sitemap/_url.xml.cfm
处实现部分代表查询或数组中的单个项目。如果您使用的不是查询,请告诉我,我可以修改上面的示例。
<cfoutput>
<url>
<loc>#arguments.uri#</loc>
<loc>#arguments.updatedAt#</loc>
</url>
</cfoutput>
请注意,当您使用这样的部分时,查询列或结构键会被放入arguments
范围,这就是我引用arguments.uri
和arguments.updatedAt
的原因我的虚构例子。
根据您服务器的URL重写功能,您可能需要尝试一些方法来获取所需的URL。
您可以在config/routes.cfm
中执行类似的操作(但我只在Apache上测试过这个):
<cfset addRoute(pattern="sitemap.[format]", controller="sitemap", action="index")>
<cfset addRoute(pattern="sitemap", controller="sitemap", action="index")>
然后您可以在http://www.example.com/sitemap.xml
如果这不起作用,请尝试:
<cfset addRoute(pattern="sitemap.xml", controller="sitemap", action="index")>
<cfset addRoute(pattern="sitemap", controller="sitemap", action="index")>
同样,您可以在http://www.example.com/sitemap.xml
最后,如果这不起作用,请从config/routes.cfm
中删除多余的行并加载此网址(无论如何,这绝对会一直有效):
`http://www.example.com/sitemap?format=xml`.
答案 1 :(得分:1)
首先,您必须将您的网络服务器配置为执行完整的URL重写(如果您尚未完成)。这样你就不必在你的URL中有index.cfm(http://mydomain.com/index.cfm/foo/bar变成http://mydomain.com/foo/bar)。
一旦到位,修改你的config / routes.cfm就像这样:
<cfset addRoute(name="sitemap",
pattern="/sitemap.xml",
controller="sitemap",
action="list") />
然后您可以在此处添加XML代码:
/views/sitemap/list.cfm
以及此处可选的控制器:
/controllers/Sitemap.cfc(带有名为list的函数)
修改的
由于以上操作不正常,我看了CFWheels附带的股票重写规则,并注意到一个大问题:
RewriteCond %{REQUEST_URI} !^.*/(flex2gateway|jrunscripts|cfide|cfformgateway|cffileservlet|railo-context|files|images|javascripts|miscellaneous|stylesheets|robots.txt|sitemap.xml|rewrite.cfm|favicon.ico)($|/.*$) [NC]
请注意“sitemap.xml”。从列表中删除它,留下您:
RewriteCond %{REQUEST_URI} !^.*/(flex2gateway|jrunscripts|cfide|cfformgateway|cffileservlet|railo-context|files|images|javascripts|miscellaneous|stylesheets|robots.txt|rewrite.cfm|favicon.ico)($|/.*$) [NC]
您可能必须重新启动/重新加载Web服务器。但是应该这样做。
编辑
最后一个想法 - 您可以在网络服务器中添加重写规则,将/ sitemap.xml的请求重定向到/ sitemap,因为您知道它可以正常工作。