簡體   English   中英

IIS URL 在 ASP.Net 4.5 Web 表單中使用子域路由和可選參數進行重寫

[英]IIS URL Rewriting with Routing for Subdomains and Optional Parameters in ASP.Net 4.5 Webforms

我正在嘗試將 IIS URL 重寫與子域和子目錄的 ASP.Net 4.5 網絡表單站點中的路由相結合。

我正在嘗試將 IIS 中的 URL 重寫與 ASP.Net 4.5 中的路由相結合,用於 Web 表單站點。 我現在擁有的解決方案非常適合使用可選參數重寫子域來路由值,但我正在努力將子目錄 URL 傳遞給路由或查詢字符串。 我正在使用的大多數參數也是可選的,因此規則必須考慮這些參數的任何組合,或者什么都不考慮。

最終目標是羽化效果,在子域側使用連字符分隔的位置,在子目錄側使用類別。 例如,包含所有參數的 URL 將類似於http://city-state.example.com/categoryslug/subcategoryslug

我在 web.config 中為子域制定的規則和我在 RouteConfig.cs 中的路由如下:

<rewrite>
      <rules>
      <rule name="Rewrite subdomains">
        <match url=".*" />
        <conditions>
          <add input="{HTTP_HOST}" pattern="^(^$|[^\-]*)(^$|[\-]?)([^\-]\w)\.example\.net$" />
          <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        </conditions>
        <action type="Rewrite" url="{ToLower:/local/{C:3}/{C:1}}" />
    </rule>

      </rules>
      <outboundRules>
        <rule name="RewriteRelativePaths" preCondition="ResponseIsHtml1">
          <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^/(.*)" negate="false" />
          <action type="Rewrite" value="http://example.net/{R:1}" />
        </rule>
        <preConditions>
          <preCondition name="ResponseIsHtml1">
            <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
          </preCondition>
        </preConditions>
      </outboundRules>
    </rewrite>


From RouteConfig.cs

// Geographic SubDomains
            routes.MapPageRoute("local/state", "local/{state}", "~/local/Default.aspx");
            routes.MapPageRoute("local/state/city", "local/{state}/{city}", "~/local/Default.aspx");


Potential Conflicting routes:

//Category
            routes.MapPageRoute("category", "{catslug}", "~/category/Default.aspx");
            //SubCategory
            routes.MapPageRoute("category/subcategory", "{catslug}/{scatslug}", "~/category/Default.aspx");

最后的預期結果應該將http://city-state.example.com/categoryslug/subcategoryslug重寫為 ~/local/{state}/{city}/{categoryslug}/{subcategoryslug} 但我看到了潛在的結果該路線與 ~/local/{state}/{categoryslug} 之類的路線之間存在沖突,我認為應用程序無法區分州/類別和州/城市。

我也有一些類別/子類別的潛在沖突路線,其中根域使用 slug 顯示類別。 我擔心的是,包含相同類別/子類別模式的路由最終可能會被發送到根域而不是子域。

由於上述問題,我認為對類別使用查詢字符串會比使用路由更好。 現在我可以在http://city-state.example.com/?category=categoryslug&subcategory=subcategoryslug加載頁面就好了。 接下來,我希望能夠將這些查詢字符串更改為 categoryslug/subcategoryslug 並將其重寫為 /local/{state}/{city}/?categoryslug=categoryslug&subcategoryslug=subcategoryslug。 我不希望將 url 重寫為類似的東西?category=&subcategory= 因為這與基於查詢字符串的頁面 select 數據的方式不兼容。

  <rule name="Rewrite subdomains">
    <match url=".*" />
    <conditions>
      <add input="{HTTP_HOST}" pattern="^(^$|[^\-]*)(^$|[\-]?)([^\-]\w)\.example\.com$" />
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    </conditions>
    <action type="Rewrite" url="{ToLower:/local/{C:3}{C:2}{C:1}{PATH_INFO}}" appendQueryString="true" />
</rule>

  </rules>
  <outboundRules>
    <rule name="RewriteRelativePaths" preCondition="ResponseIsHtml1">
      <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^/(.*)" negate="false" />
      <action type="Rewrite" value="http://example.com/{R:1}" />
    </rule>
    <preConditions>
      <preCondition name="ResponseIsHtml1">
        <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
      </preCondition>
    </preConditions>
  </outboundRules>
</rewrite>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM