2011-03-30 42 views
1

我正在使用IIS7的URLRewrite功能在我的ASP.NET WebForms應用程序的URL中隱藏.aspx擴展名。如何阻止使用IIS7的URLRewrite模塊直接訪問.aspx頁面?

我使用了以下配置:

<rule name="WebFormsToMVC" stopProcessing="true"> 
    <match url="^(.*?)\.aspx\?*?.*$" /> 
    <conditions> 
     <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
     <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
    </conditions> 
    <action type="Rewrite" url="{R:1}" /> 
</rule>` 

我現在就可以瀏覽到:

http://www.mytest.com/contact

,這被改寫爲:

http://www.mytest.com/contact.aspx

這保留「pr etty「url在瀏覽器地址欄中。我還更新了網站上的所有鏈接以使用無擴展名的網址。

問題是,底層的.aspx頁仍然可以直接訪問,我想要阻止這一點。

如果用戶瀏覽到http://www.mytest.com/contact.aspx我希望它重定向/重寫爲http://www.mytest.com/contact,或者至少返回一個「找不到頁面」。

更新:

我設法通過重定向所有.aspx頁面到主目錄得到這個工作。這並不理想,因爲我寧願將它們發送到非.aspx版本,但它現在就會完成。

<rule name="Block .aspx" stopProcessing="true"> 
    <match url=".aspx" /> 
    <action type="Redirect" url="/" /> 
</rule>` 

如何重寫和重新導向網址,直接解決.aspx網頁對我友好的URL格式?

回答

0

以下規則將從URL剝離.aspx,然後將瀏覽器重定向到擴展名的URL:

<rule name="Redirect to friendly" stopProcessing="true"> 
    <match url="^(.*)\.aspx$" /> 
    <action type="Redirect" url="{R:1}" /> 
</rule> 

我會用這種方法預測(與你的其他規則)的一個問題是,如果你有一個名爲contact.aspx的頁面和一個名爲/contact的文件夾。這會產生一些意想不到的問題。

+0

謝謝,多數民衆贊成我正在尋找,我以爲我試過,但也許我的語法有點不對。 – 2011-04-01 11:38:20