2009-02-21 5 views
0

Я внедрил следующий код в файле Global.asax моего веб-приложения.Как получить без "default.aspx" url?

void Application_BeginRequest() 
{ 

    string rule = ConfigurationManager.AppSettings.Get("WwwRule"); 

    HttpContext context = HttpContext.Current; 
    if (context.Request.HttpMethod != "GET" || context.Request.IsLocal) 
    { 
     return; 
    } 

    if (context.Request.PhysicalPath.EndsWith(".aspx", StringComparison.OrdinalIgnoreCase)) 
    { 
     string url = context.Request.Url.ToString(); 

     if (!url.Contains("://www.") && rule == "add") 
     { 
      string url = context.Request.Url.ToString().Replace("://", "://www."); 
      context.Response.Redirect(url); 
     } 
    } 
} 

Когда я бегу выше код работает следующим образом

example.com перенаправляет www.example.com/default.aspx

www.example.com перенаправляет на www.example.com

http://www.example.com/ перенаправляет http://www.example.com/

двух последних условий работает очень хорошо. Но первое условие did'nt работает хорошо, потому что его добавления «default.aspx» в URL, который я не заинтересовать такие предприятия.

Может кто-нибудь пожалуйста, скажите мне, как сделать это, как показано ниже

example.com должен перенаправляет http://www.example.com

Благодарности

+0

Мне кажется, что вы пытаетесь выполнить переписывание url вместо фактического перенаправления. – Cerebrus

+0

Нет, я не думаю, что его переписывание URL ?? Я просто хочу, чтобы он не добавлял default.aspx в случае, если кто-то запрашивает пример example.com/search.aspx, тогда он может перенаправляться на http://www.example.com/search.aspx – Prashant

+0

. Я просто обеспокоен дефолтом .aspx ??? – Prashant

ответ

2

Скорее всего Request.Url является добавление default.aspx, потому что это страница фактически служил в то время (IIS делает это прозрачно для вас, потому что это одна из страниц по умолчанию).

Когда вы создадите новый URL-адрес, который вы собираетесь перенаправить, добавьте еще один .Replace ("/ default.aspx", "") до конца. Итак ...

string url = context.Request.Url.ToString().Replace("://", "://www.").Replace("/default.aspx", ""); 
+0

Это не будет работать должным образом во всех ситуациях. Несмотря на очень маловероятную ситуацию, но он изменит «example.com/default.aspxfolder/file» на «www.example.comfolder/file». – Guffa

+0

@ Guffa Я согласен, но простота - это точка моего ответа, чтобы ассер понял, что происходит самым простым способом, а затем может расширить его по мере необходимости. :) – Brandon

2

на самом деле, /default.aspx добавляется, прежде чем запрос достигнет события BeginRequest. Если вы хотите, чтобы удалить его, вы должны фактически удалить его:

void Application_BeginRequest() { 
    string rule = ConfigurationManager.AppSettings.Get("WwwRule"); 

    HttpContext context = HttpContext.Current; 
    if (context.Request.HttpMethod != "GET" || context.Request.IsLocal) { 
     return; 
    } 

    if (context.Request.PhysicalPath.EndsWith(".aspx", StringComparison.OrdinalIgnoreCase)) { 
     string url = context.Request.Url.ToString(); 

     if (!url.Contains("://www.") && rule == "add") { 
      url = url.Replace("://", "://www."); 
      if (url.EndsWith("/default.aspx", StringComparison.OrdinalIgnoreCase) { 
       url = url.Substring(0, url.Length - 13); 
      } 
      context.Response.Redirect(url); 
     } 
    } 
} 
0

изменить ваш webconfig с помощью нижеприведенного кода: он решает мою проблему.

<?xml version="1.0"?> 
<configuration> 
    <system.webServer> 
     <rewrite> 
      <rules> 
       <rule name="default.aspx Redirect" stopProcessing="true"> 
        <match url="^(.*\/)*default\.aspx$" /> 
        <conditions logicalGrouping="MatchAll"> 
         <add input="{REQUEST_METHOD}" negate="true" pattern="^POST$" /> 
        </conditions> 
        <action type="Redirect" url="{R:1}" redirectType="Permanent"/> 
       </rule> 
      </rules> 
     </rewrite> 
    </system.webServer> 
</configuration> 
Смежные вопросы