1

我想知道crafter(3.0)是否有能力做url映射。

例如,要在给定的路径中包含内容,例如/site/website/foobar/mycontent/index.xml,并且其 url 为/news/2017/11/17/my-content(注意添加的/内容不能在file-name字段中使用,因为它们会-在工作室中自动转换为)。

谢谢,

尼古拉斯

4

1 回答 1

2

我们的路线图上有一个内置路由器(https://github.com/craftercms/craftercms/issues/1622),但现在,您可以轻松地将一个路由器添加到您的蓝图中:

  1. 创建一个包含“路由表”的组件。该组件有一个重复表,其中每个条目是入站 URL 和出站 URL。
  2. 创建一个 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)
    }
    
于 2017-11-17T21:44:14.777 回答