umbraco在除root之外的所有页面上给出404。预览工作正常

时间:2013-12-31 01:25:29

标签: iis configuration umbraco upgrade

背景

我们正在将运行在Win2k8r2 / IIS7.5,SQL2k8r2上的umbraco 4.5.2站点升级到umbraco 4.11.10。考虑到执行升级所需的步骤数,我们选择离线执行,然后使用更新的数据库和文件系统替换生产。 我们进行了离线升级,将其升级到4.11.10(4.5.2 - > 4.6.1 - > 4.7.2 - > 4.8.1 - > 4.9.1 - > 4.11.10)。这些升级会影响数据库和文件系统。

旧系统有14个域名解析到1 umbraco站点。这些域只是别名,并且每个要求都没有设置从13个域到主服务器的重定向 - 相反,每个域提供相同的内容 - 只是使用不同的主机。 在IIS中定义了14个主机头。它们也在umbraco中定义:

Content   (folder)
    EN    (language folder)
        Home   (Hostnames are defined here)
        Top Level 1 (also a child of EN)
        Top Level 2 (also a child of EN)

问题

当我们在localhost(在IIS中定义但不在umbraco中作为主机名)进行测试时,该站点会按预期呈现内容。但是,当我们使用IIS中的一个主机和umbraco主机名中的一个主机进行测试时(在将其设置为在hosts文件中解析为127.0.0.1之后),我们可以进入主页,但所有其他页面都会导致404。

主页和预览页面呈现正常,内容编辑器和其他后端管理功能正常工作。但是,“漂亮的网址”页面不会呈现并导致404错误。

我做了什么

  • 我删除了app_data\umbraco.config并重新发布了整个网站。
  • 在IIS中创建一个新网站。仍然在站点根目录以外的页面上获取404。
  • 看着umbracoLog表。在升级之前/之后没有看到任何关于404或任何看起来不寻常的东西,但我不是umbracoLog专家。

是否有必要进行4.11.10的全新安装以安装我可能缺少的先决条件?如果是这样,这些先决条件是什么,可以独立于4.11.10安装进行安装吗?

我不知道可能导致这个问题的原因。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

项目组合修复了问题。

  1. 主要问题是在Home节点下的umbraco中定义了主机名。我删除了Host节点上umbraco中定义的主机名。主机名仍然存在于IIS中。
  2. config\umbracoSettings.config
    1. <useDomainPrefixes>设为false
    2. <addTrailingSlash>设为false
  3. web.config设置umbracoUseDirectoryUrlstrue
  4. 最后,通过将以下内容添加到/
  5. ,修复删除导致EN请求解析到config\UrlRewriting.config节点的umbraco主机名的副作用
     <add name="SiteRootHack"
          virtualUrl="^~/$"
          rewriteUrlParameter="ExcludeFromClientQueryString"
          destinationUrl="~/home.aspx"
          ignoreCase="true" /> 
    

答案 1 :(得分:0)

你应该检查几件事,但如果你得到Umbraco的404页面,你可以访问后台,那么这至少是一个好兆头!

要做的第一件事是检查〜/ app_data / logs /的Umbraco日志,看看Umbraco在每个请求中记录了什么,如果有的话。然后检查:

  • 您是否在服务器上安装了MVC3和4?
  • 应用程序是否在.Net 4集成应用程序池中运行?
  • 您是否已将“写入”权限应用于正确的文件夹?
  • 尝试删除Umbraco后台中的所有域设置,如果该站点是基本安装,则这些设置几乎是多余的。

如果可能,您还应该从NuGet创建一个Umbraco项目,这样就可以在项目中安装有关DLL依赖项的所有内容。此外,不需要在如此多的步骤中进行升级。应该可以从4.5升级到4.7然后直接升级到4.11。

最后,检查Umbraco版本中的重大变化。例如,GetProperty("propertyName").Value在一个版本中返回string,然后在后一个版本4.11中更改为object,因此这显然会导致NullReference例外,这可能是无意中造成404的。如果不进行一些代码更改,您就不可能像这样升级。