我想知道crafter(3.0)是否有能力做url映射。
例如,要在给定的路径中包含内容,例如/site/website/foobar/mycontent/index.xml
,并且其 url 为/news/2017/11/17/my-content
(注意添加的/
内容不能在file-name
字段中使用,因为它们会-
在工作室中自动转换为)。
谢谢,
尼古拉斯
我想知道crafter(3.0)是否有能力做url映射。
例如,要在给定的路径中包含内容,例如/site/website/foobar/mycontent/index.xml
,并且其 url 为/news/2017/11/17/my-content
(注意添加的/
内容不能在file-name
字段中使用,因为它们会-
在工作室中自动转换为)。
谢谢,
尼古拉斯
我们的路线图上有一个内置路由器(https://github.com/craftercms/craftercms/issues/1622),但现在,您可以轻松地将一个路由器添加到您的蓝图中:
创建一个 Groovy 过滤器脚本,它将拦截所有调用并检查 URL 是否与入站 URL 之一匹配。如果是,它将请求转发到相应的出站 URL。以下是此类过滤器的可能代码:
def routingTableItem = siteItemService.getSiteItem("/site/components/system/routing-table.xml")
def routingTable = routingTableItem.urlRoutingTable.item
def currentURL = request.requestURI
def matchedEntry = routingTable.find { entry ->
return currentURL == entry.inboundURL.text
}
if (matchedEntry) {
def inboundURL = matchedEntry.inboundURL.text
def outboundURL = matchedEntry.outboundURL.text
logger.info("Forwarding URL ${inboundURL} to ${outboundURL}")
request.getRequestDispatcher(outboundURL).forward(request, response)
} else {
filterChain.doFilter(request, response)
}