2011-03-24 43 views
0

我習慣了Apache/PHP,我可以指定給定的域在哪裏尋找最初的index.php文件。.net web應用程序更改根目錄

我做在.net一個項目,我有一個目錄結構的東西鏈接

應用程序名稱 /內容/ - >圖片之類的東西 /腳本/ /網頁/

當我啓動應用程序,它給了我上面的目錄結構,但網站的實際起始位置在WebPages目錄中,一個default.aspx頁面。

我沒有意識到這是一個問題,直到我開始鏈接頁面,並意識到我不想在URL obv中包含/ WebPages /目錄。 somedomain.com/WebPages/somepasge.aspx。

來自Apache,我正在尋找的是一種方式來告訴.Net其中實際的Web目錄的根文件夾,其中將相對鏈接榮幸。我可以將/ WebPagse /目錄下的所有文件移動到下面,但我寧願將這些文件分開放置,以使目錄結構令人愉快,並使OCD處於托起狀態。

摘要

當前頁例...

example_domain.com/WebPages/SubDirectory/Subpage.aspx

理想的情況下,將通過鏈接...

<a href='/SubDirectory/Subpage.aspx'>Some page</a> 

回答

0

我猜測你需要在你的鏈接前加一個波浪號......

「〜/ subdirectory/subpage.aspx」

這意味着它將從虛擬目錄開始。

+0

我想我需要爲它設置成/我在Visual Studio中的配置改變我的虛擬目錄。它應該在技術上設置爲類似/ WebPages /然而,當我嘗試這意味着我的網頁解析爲/ WebPages/Webpages /所以這是不完全正確的... – Steffan 2011-03-24 20:55:01

+0

如果您的虛擬目錄是example_domain.com(如它應該)那麼你的路徑應該是〜/ WebPages/subpage.aspx。如果你在視圖中使用MVC,你可以使用html助手。如果你在webforms你應該使用UrlHelper類,谷歌。然後像<%= Urlhelper(EnumPage.Subpage)%>那樣從你的頁面使用它。下面推薦有更新的方法複製mvc來做到這一點在webforms中,我走出了循環,我現在升級所有的MVC。 – gt124 2011-03-24 21:09:13

0

如果您使用的是IIS,請將網站的Home DirectoryRight click website -> Properties -> Home Directory)設置爲WebPages。然後將虛擬目錄製作成資源文件夾。

+0

我可以在我發佈的機器上設置它,在我測試我的代碼時,是否有一種方法可以在我的本地Visual Studio環境中爲它設置的服務器進行設置? – Steffan 2011-03-24 19:54:10

+0

您可以嘗試使用IIS Express並找出所需的配置以執行您想要的操作。關於虛擬目錄的信息在這裏:http://stackoverflow.com/questions/4731608/iis-7-5-express-new-virtual-dir – 2011-03-24 19:57:54

1

對於服務器端控件,您可以使用代字號「〜」來解析根。對於非服務器控件,它只是簡單的xml路徑(例如「../」)。

所以對客戶端的圖像,你需要知道你在哪裏,例如:

<int src="../Content/Images/image1.jpg"/> 

服務器端圖像:

<asp:Image ID="Image1" runat="server" ImageUrl="~/Content/Images/image1.jpg"/> 

編輯

我第一次誤解了這個問題,儘管我會留下上面的情況以便幫助某人。

您可以通過URL Rewriting完成要查找的內容。這是ASP.NET Web Forms(版本4)的新功能,並且自版本1起一直與ASP.NET MVC配合使用。

請注意,如果您使用的是較舊版本的ASP。NET,你仍然可以做URL重寫,但不能將版本烘焙到.NET 4.

就你而言,你基本上可以匹配「/WebPages/*.aspx」,找出子目錄和頁面,然後從那裏重寫。

諮詢

如果你要下去重寫路徑,我建議你只是想出更好的路徑(沒有.aspx擴展名,沒有查詢字符串參數等)。

+0

好吧,這是很好的事情下的內容文件夾,我明白了。不過我的網頁不在/ WebPages /目錄下,我不想展示。我想我需要改變我的虛擬目錄根路徑或者其他的,我理想的情況是能夠在Visual Studio以及我的開發服務器(IIS 7) – Steffan 2011-03-24 20:52:40

+0

中做到這一點啊,我誤解了你的問題。你使用的是什麼版本的.NET? – 2011-03-24 20:57:30

+0

我認爲4.0,我發佈到的開發服務器上的IIS 7,2010開發的Visual Studio,並與「Visual Studio開發服務器」一起使用。 – Steffan 2011-03-24 21:07:12

0

根據Giovanni的answer,您應該對所有服務器端控件子屬性使用'〜'語法。代字號(〜)將解析爲Web應用程序根目錄。

但是,對於非服務器控件屬性(stylesheet-link's,a-href's,img-src's等),您將不得不使用相對路徑。

爲了保持一致性,您可以考慮使用自定義HttpHandler實現來解析非服務器控件內容的「〜」路徑。周圍可能有幾個examples

1

我的網站的根目錄位於子文件夾www(其中index.html是)。爲了將根目錄設置到www您可以添加以下到您的Web.config文件

<configuration> 
    <system.web> 
     ... 
     <urlMappings enabled="true"> 
      <add url="~/" mappedUrl="~/www/index.html" /> 
     </urlMappings> 
    </system.web> 
    ... 
    <system.webServer> 
     ... 
     <rewrite> 
      <rules> 
      <rule name="Redirect everything to root" stopProcessing="true"> 
       <match url=".*" /> 
       <conditions logicalGrouping="MatchAll"> 
       <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
       <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
       </conditions> 
       <action type="Rewrite" url="/www/{R:0}" /> 
      </rule> 
      </rules> 
     </rewrite> 
    </system.webServer> 
    ... 
</configuration> 
相關問題