5

我在一个项目上使用 ISAPI 重写,想知道是否可以从 Tridion 发布 .htaccess 文件?

我已尝试使用 .htaccess 扩展名创建页面模板,但无法创建没有名称的页面。

有任何想法吗?

我可以使用 C# TBB 来更改页面名称吗?

4

2 回答 2

3

我也会选择使用二进制文件来实现这一点,但是如果您想使用文本而不是多媒体组件来管理 htaccess 文件,您可以使用以下技术将二进制文件推送到您的包中:

1)将Htaccess文件的文本以可访问的名称(即Binary_Text)推送到包中 2)使用类似下面的代码从变量中的文本创建一个文本文件并将其添加到包中

class publishStringItemAsBinary : ITemplate
{
    public void Transform(Engine engine, Package package)
    {
        TemplatingLogger log = TemplatingLogger.GetLogger(typeof(publishStringItemAsBinary));
        TemplateUtilities utils = new TemplateUtilities();
        System.IO.Stream inputStream = null;
        try
        {
            string strInputName = package.GetValue("InputItem");
            string strFileName = package.GetValue("strFileName");
            string sg_Destination = package.GetValue("sg_Destination");
            string itemComponent = package.GetValue("mm_Component");

            inputStream = new MemoryStream(Encoding.UTF8.GetBytes(package.GetValue(strInputName)));

            log.Debug("InputObject:" + strInputName);
            log.Debug("Filename for binary:" + strFileName);
            log.Debug("Destination StructureGroup:" + sg_Destination);
            Publication contextPub = utils.getPublicationFromContext(package, engine);
            TcmUri uriLocalSG = TemplateUtilities.getLocalUri(new TcmUri(contextPub.Id), new TcmUri(sg_Destination));
            TcmUri uriLocalMMComp = TemplateUtilities.getLocalUri(new TcmUri(contextPub.Id), new TcmUri(itemComponent));
            StructureGroup sg = (StructureGroup)engine.GetObject(uriLocalSG);
            Component comp = (Component)engine.GetObject(uriLocalMMComp);
            String sBinaryPath = engine.PublishingContext.RenderedItem.AddBinary(inputStream, strFileName, sg, "nav", comp, "text/xml").Url;
            //Put a copy of the path in the package in case you need it
            package.PushItem("BinaryPath", package.CreateStringItem(ContentType.Html, sBinaryPath));
        }
        catch (Exception e)
        {
            log.Error(e.Message);
        }
        finally
        {
            if (inputStream != null)
            {
                inputStream.Close();
            }

        }
    }
}

我认为代码很容易解释。这会发布 text/xml 类型的二进制文件,但将其转换为纯文本文件应该没有问题。

于 2012-04-13T11:41:23.863 回答
3

我认为您可以使用多媒体组件来存储您的 .htaccess。即使您无法上传没有名称的文件(Windows 限制),您也可以稍后通过修改BinaryContent.Filename多媒体组件的属性来更改文件名。然后,您可以单独发布此组件,或使用AddBinary其中一个模板中的方法。

还有一个用户模式,您可以在其中更改一些其他规则:“\Tridion\bin\cm_xml_usr.xsd”,但您将不能允许空文件名

于 2012-04-13T11:09:18.807 回答