Композитный C1 не генерирует sitemap.xml
Быстрые характеристики:
Композит С1 4.1
Windows 2003 Server
IIS 6
.NET Framework 4.0
Все, что новее, не будет работать на моем старом сервере.
Я пытался получить доступ к sitemap.xml моего сайта (прямая ссылка), но он продолжает выдавать ошибку 404. Я просмотрел Интернет, но единственное, что я могу найти в карте сайта, - это страница руководства Composite, в которой говорится, что нужно изменить мой web.config, и все должно быть решено, и он сгенерирует sitemap.xml для меня. Это, однако, не так для меня, я что-то упустил? Пока я проверил следующее:
- Страница 404 в IIS ссылается на /Renderers/FileNotFoundHandler.ashx
- System.web и sytem.webserver (последний из них бесполезен для IIS6, насколько я помню) имеют настройки, указанные в руководстве.
- Композит С1 имеет правильные права на сервере
- robots.txt имеет правильную ссылку на карту сайта
- Пользовательский режим ошибки установлен на Remote Only, и я получаю к нему удаленный доступ.
- Не удалось найти пакет Composite.AspNet.SitemapHandler в доступных пакетах
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!-- Hey Dev! Changing or removing existing elements in this file may cause functionality in Composite C1 to break -->
<system.web>
<trust level="Full" />
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
<customErrors mode="RemoteOnly">
<error statusCode="404" redirect="Renderers/FileNotFoundHandler.ashx" />
</customErrors>
<compilation debug="false" optimizeCompilations="false">
<assemblies>
<add assembly="System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
<add assembly="System.Workflow.ComponentModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add assembly="System.Workflow.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add assembly="System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
<buildProviders>
<add extension=".cshtml" type="System.Web.WebPages.Razor.RazorBuildProvider, System.Web.WebPages.Razor" />
</buildProviders>
</compilation>
<httpRuntime relaxedUrlToFileSystemMapping="true" requestPathInvalidCharacters="<,>,*,%,&,\,?" /> <!-- colon removed from @requestPathInvalidCharacters -->
<xhtmlConformance mode="Strict" />
<trace enabled="false" traceMode="SortByTime" requestLimit="100" writeToDiagnosticsTrace="false" pageOutput="true" />
<pages clientIDMode="AutoID">
<controls>
<add tagPrefix="f" namespace="Composite.Plugins.PageTemplates.MasterPages.Controls.Functions" assembly="Composite" />
<add tagPrefix="c1" namespace="Composite.Plugins.PageTemplates.MasterPages.Controls.Rendering" assembly="Composite" />
</controls>
</pages>
<!-- IIS6 & IIS7 Clasic mode -->
<httpModules>
<add name="ApplicationOfflineCheck" type="Composite.Core.Application.ApplicationOfflineCheckHttpModule, Composite" />
<add name="AjaxResponseHandler" type="Composite.Core.WebClient.Ajax.AjaxResponseHttpModule, Composite" />
<add name="CompositeAdministrativeResponseFilter" type="Composite.Core.WebClient.HttpModules.AdministrativeResponseFilterHttpModule, Composite" />
<add name="CompositeAdministrativeAuthorization" type="Composite.Core.WebClient.HttpModules.AdministrativeAuthorizationHttpModule, Composite" />
<add name="CompositeRequestInterceptor" type="Composite.Core.WebClient.Renderings.RequestInterceptorHttpModule, Composite" />
<add name="CompositeAdministrativeDataScopeSetter" type="Composite.Core.WebClient.HttpModules.AdministrativeDataScopeSetterHttpModule, Composite" />
<add name="CompositeAdministrativeCultureSetter" type="Composite.Core.WebClient.HttpModules.AdministrativeCultureSetterHttpModule, Composite" />
</httpModules>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="C1Page" duration="60" varyByCustom="C1Page" varyByParam="*" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
<httpHandlers>
<add verb="GET" path="sitemap.xml" type="Composite.AspNet.SiteMapHandler, Composite" />
</httpHandlers>
<siteMap defaultProvider="CompositeC1">
<providers>
<add name="CompositeC1" type="Composite.AspNet.CompositeC1SiteMapProvider, Composite" />
</providers>
</siteMap>
</system.web>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" compilerOptions="/warnaserror-" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<providerOption name="CompilerVersion" value="v4.0" />
</compiler>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" compilerOptions="/optioninfer+" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<providerOption name="CompilerVersion" value="v4.0" />
</compiler>
</compilers>
</system.codedom>
<!-- IIS7 Intergrated mode configuration -->
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="UrlRoutingModule"/>
<add name="ApplicationOfflineCheck" type="Composite.Core.Application.ApplicationOfflineCheckHttpModule, Composite" />
<add name="AjaxResponseHandler" type="Composite.Core.WebClient.Ajax.AjaxResponseHttpModule, Composite" />
<add name="CompositeAdministrativeResponseFilter" type="Composite.Core.WebClient.HttpModules.AdministrativeResponseFilterHttpModule" />
<add name="CompositeAdministrativeAuthorization" type="Composite.Core.WebClient.HttpModules.AdministrativeAuthorizationHttpModule, Composite" />
<add name="CompositeRequestInterceptor" type="Composite.Core.WebClient.Renderings.RequestInterceptorHttpModule, Composite" />
<add name="CompositeAdministrativeDataScopeSetter" type="Composite.Core.WebClient.HttpModules.AdministrativeDataScopeSetterHttpModule, Composite" />
<add name="CompositeAdministrativeCultureSetter" type="Composite.Core.WebClient.HttpModules.AdministrativeCultureSetterHttpModule, Composite" />
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</modules>
<handlers>
<add name="SiteMap" verb="GET" path="sitemap.xml" type="Composite.AspNet.SiteMapHandler, Composite" />
<add name="Wildcard ASP.NET mapping" preCondition="classicMode,runtimeVersionv4.0,bitness32" path="*" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" />
<add name="Wildcard ASP.NET mapping (x64)" preCondition="classicMode,runtimeVersionv4.0,bitness64" path="*" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" />
<add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</handlers>
<staticContent>
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00" />
</staticContent>
<urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="true" />
</system.webServer>
<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
</configuration>
1 ответ
Ошибка моего файла Sitemap при использовании нескольких привязок имени хоста с одним и тем же HomePageId и Culture:/
Это может или не может совпадать с вашей проблемой, но это именно то, что я сделал, чтобы иметь одинаковую конфигурацию (страница 404 и т. Д.) Во всех моих средах:
Учитывая детали ошибки, вот что я получаю:
Исходный код доступен по адресу https://compositec1.codeplex.com/SourceControl/latest - так я узнал, как "исправить" мою проблему.
Мой сайт сейчас в порядке, поэтому я могу с уверенностью закомментировать свои непроизводственные записи в App_Data\Composite\DataStores\Composite.Data.Types.IHostnameBinding.xml
, что снова дает мне полностью работающий генератор Sitemap:]
Я попытался "обмануть" ошибочную функцию, изменив Культуру (например, Культура не по умолчанию или изменив регистр строки) или HomePageId (например, идентификатор не домашней страницы), однако я столкнулся с некоторыми другими проблемами. затем:\