title: urlresolver --- type: method --- summary: Registers a custom URL resolver function. --- body: This is very experimental API and used to register a custom URL resolver function with the environment. It's invoked whenever a node has matched but more data is left to parse. This can be used to implement virtual items. This works in combination with [generator :ref](../generator/) but handles the URL matching part of the equation. The registered function is invoked with a source object and a list of URL path segments. ## Example ```python from lektor.sourceobj import VirtualSourceObject from lektor.utils import build_url class Source(VirtualSourceObject): @property def path(self): return self.record.path + '@source' @property def url_path(self): return build_url([self.record.url_path, 'source.txt']) @env.urlresolver def match_source_file(node, url_path): if url_path == ['source.txt'] \ and isinstance(node, Record) \ and not node.is_attachment: return Source(node) ```