MVC发布到主机正在添加额外的子文件夹

时间:2012-08-06 00:12:25

标签: asp.net-mvc subdirectory

我正在将一个MVC 3网站发布到一个go daddy帐户。我在VS 2010中使用FTP发布实用程序。该网站发布“好的”。但问题出在这里:

在我的本地机器上,当我运行它时,网址是:
    本地主机/学生/创建

在我去的爸爸帐户上,我创建了一个名为mvctest的子目录。 我创建了一个名为mvctest.mysite.com的子域,它指向mvctest的虚拟目录。这很好用。

但是在我将网站发布到www.mysite.com/mvctest后,我在所有链接中都获得了一个额外的/ mvctest /目录。我想要的是:
mvctest.mysite.com/Student/Create
我得到的是:
mvctest.mysite.com/mvctest/Student/Create

有趣的是,如果我手动输入我想要的内容,页面加载就可以了。如果我已经硬编码了一个到root的链接,那很好,但是我的所有Url.Content和Html。 Links添加了额外的mvctest目录..

我到处搜索过,并没有找到解决这个困境的答案。我试过在web.config中,但我不认为这样做。我觉得VS2010中的FTP发布实用程序正在改变我的global.asax文件中的路由结构,但我不确定。

任何建议表示赞赏。

2 个答案:

答案 0 :(得分:0)

您的虚拟目录是应用程序吗?如果未将其设置为应用程序,IIS将把您站点的根目录视为应用程序并添加子目录。见this post

答案 1 :(得分:0)

以下为我解决了同样的问题,引自我发现的博文(source):

现在对于解决方案而言,我可能应该在开始时提到这一点,但希望您使用安装了URL重写模块的IIS7(在GoDaddy上使用IIS7时默认安装)。 只需将以下内容添加到web.config的system.webServer元素中:

<rewrite>
  <rules>
    <rule name="Remove Virtual Directory">
      <match url=".*" />
      <action type="Rewrite" url="{R:0}" />
    </rule>
  </rules>
</rewrite>

所有这一切都是“重写”自己的URL。这会导致URL Rewrite将原始URL(没有文件夹名称的URL)添加到ServerVariable,ASP.NET MVC使用它来生成其他URL。