2012-05-07 14 views
3

I IIS 7で、次のルールがありますようだは7書き換えルールをIISとUrl.Contentが発行

  <rule name="Category" enabled="true"> 
       <match url="^store/([0-9]+)/(.*)" /> 
       <action type="Rewrite" url="store?cid={R:1}" appendQueryString="false" logRewrittenUrl="true" /> 
      </rule> 

は私のASP.Net MVC 3アプリでただし、正常に動作するために、私はいくつか持っているの@ Url.Content /とは対照的に/ store /に解決されている( "〜/")エントリ。典型的なURLは例えばhttp://mysite.com/store/99/coats-with-hoodsである。

EDIT/UPDATE:私はまだこの記事を読んでいないので、私はUrl.Contentコードベースを調べることにしました。URLが書き直されているかどうかを確認しました。これは次のようになり、なぜ

if (!PathHelpers._urlRewriterHelper.WasRequestRewritten(httpContext)) 
     return contentPath; 
    string relativePath = PathHelpers.MakeRelative(httpContext.Request.Path, contentPath); 
    return PathHelpers.MakeAbsolute(httpContext.Request.RawUrl, relativePath); 

誰もが知っている:それは、パスが関連になりそうだとすれば今度はは私に絶対URLを与えるものではありませんか?私はなぜこれが起こっているのか、私のアプリケーションでそれをどう説明することができるのか、ちょっと混乱していますか?

+0

フォルダ構造に関してプロジェクトとIISがどのように設定されているかについての詳細情報を提供できますか? –

+0

これはWebサイトのルートで実行されていますが、仮想ディレクトリでは実行されていません。何を知る必要がありますか? – Mantorok

答えて

2

私は、ASP.Net MVCに対してIIS Rewriteを使用することはできないことに気づきました。代わりにHttpContext.RewritePathを使用することに決めました。

これは、影響を受けたUrl.Contentだけでなく、コントローラーのルートでもあったため、非常に根本的な問題です。この特定のページのフォームも誤って/ store//を指していました。あなたのサイトは現在、常にドメイン/サブドメインのルートになる場合

+0

これは助けになりましたが、私は単にチルダ(〜)を削除するだけで私の仕事ができることも発見しました。そのようにはならないが、問題を解決した。 – Jacques

+0

@Jacquesチルダを削除するのは、ルートWebサイトである限り機能します。 Webサイト内でアプリケーションを実行している場合は、チルダが必要です。そうでない場合は、不正なルートWebサイトに移動します。 – BVernon

1

はその後~を失い、ちょうどすべてのURLが/path/to/contentを可能にする(例えば、あなたは常にsite.com/を意味する~/をつもり)。 ~あなたが見てきたように、いくつか不気味なブードーのことがあります。

+0

これは私のコンテンツに影響するだけでなく、Html.BeginFormにも影響し、不正なルートになります! – Mantorok

関連する問題