2013-04-16 36 views
5

この質問は、例で最も効果的です。IISでURLに余分なフォワードスラッシュをリダイレクトする方法

は、私のWebアプリがhttp://example.com/WebApp/

According to Microsoftでホストされて前方に末尾のスラッシュが欠落している場合、IISはリダイレクトしますと言います。これは期待どおりに動作します。http://example.com/WebAppに送信されたリクエストはhttp://example.com/WebApp/にリダイレクトされます。

私の場合、誰かが余分なスラッシュ:http://example.com/WebApp//でブックマークしました。これは期待どおりのWebアプリケーションをロードしますが、すべての相対URLが間違っています。たとえば、同じドメインの別のアプリ(../AnotherApp/SomePage.aspxなど)を呼び出すと、/AnotherApp/SomePage.aspxを正しく読み込む代わりに、/WebApp/AnotherApp/SomePage.aspxを読み込もうとします。

http://example.com/WebApp//http://example.com/WebApp/にリダイレクトするにはどうすればよいですか?

+0

これはあなたがすべきことではありません...それは私が今それをテストすることができないので確かに働くでしょう。しかし、おそらく、URLが一致しない場合、Request.Urlをチェックしてユーザーをページにリダイレクトするページロードイベントにコードを追加することができます。何か試しましたか? –

+0

@DanielCookこの時点で、Requestオブジェクトは '/ WebApp/Default.aspx'と言って遅すぎるので、これは機能しません。 – styfle

+0

[複数のスラッシュを削除](http://stackoverflow.com/questions/12004223/remove-multiple-forward-slashes) – dana

答えて

0

IISリライトモジュール(http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#Rule_Pattern)を正規表現で使用して、単一のスラッシュバージョンにリダイレクトすることができます。

たとえば、あなたがこの正規表現とURLの余分なスラッシュとを一致させることができます:

http://.*/{2,}

+0

私はこれを試して、動作させることができませんでした。参考までに、私が試したことは次のとおりです。 dana

+0

これをWeb.configにどこに追加しますか? – styfle

+1

system.webServer-> rewrite-> rules-> rule –

1

それだけでは、サーバーサイドスクリプトでこれを行うことは困難で表示されます。おそらく、JavaScriptでリダイレクトすれば十分でしょうか?

<html> 
<head> 
<script type="text/javascript"> 
(function() { 
    var protocol = location.href.substr(0, location.href.indexOf("://")); 
    var restOfUrl = location.href.substr(location.href.indexOf("://") + "://".length); 
    if (restOfUrl.match(/\/\//)) { 
     location.href = protocol + "://" + restOfUrl.replace(/\/\//g, "/"); 
    } 
})(); 
</script> 
</head> 
<body> 
... 
</body> 
</html> 

また、あなたはそのように検索エンジンのインデックスに物事を正しくあなたのページにcanonical linkを設定することを検討すべきです。

+0

私はこの解決方法を避けようとしていました。誰も良い答えが出てこない場合は、私はこれを受け入れます。 – styfle

+0

私はサーバ上の2つのスラッシュを読むのに苦労していたので、私はこれに頼りました。興味深いことに、ここではほぼ同じ質問があります - http://stackoverflow.com/questions/12004223/remove-multiple-forward-slashes受け入れられた回答では、Global.asax.cs内からサーバー変数が読み取られています。それがうまくいくかどうかはわかりませんが、その価値はあります。 – dana

+0

私はちょうどテストし、二重スラッシュはUNENCODED_URLサーバー変数にあります。それを確認し、それに応じてリダイレクトすることができます。 – dana

関連する問題