2011-05-23 12 views
17

Estoy usando ASP .NET rewriteModule para reescribir http://example.com en http://www.example.com.Eliminando .aspx de las páginas usando rewriteModule?

<section name="rewriteModule" type="RewriteModule.RewriteModuleSectionHandler, RewriteModule"/> 

Luego tengo esto dentro de <system.webServer>.

<rewrite> 
     <rules> 
      <rule name="Canonical" stopProcessing="true"> 
       <match url=".*"/> 
       <conditions> 
        <add input="{HTTP_HOST}" pattern="^([a-z]+[.]com)$"/> 
       </conditions> 
       <action type="Redirect" url="http://www.{C:0}/{R:0}" redirectType="Permanent"/> 
      </rule> 
     </rules> 
    </rewrite> 

Ahora quiero eliminar todos los .aspx al final de mis páginas. Ejemplo:

http://www.example.com/Register.aspx

se convertirá en:

http://www.example.com/Register/

¿Cómo puedo hacer eso?

Estoy en Web Hosting Compartido en GoDaddy usando IIS7.

Respuesta

21

Estas son las reglas de reescritura estándar con las que inicio cada proyecto. Yo uso URL única limpias para todas las páginas (Ejemplo primera regla funciona para www.example.com/about y la segunda regla www.example.com/product/123)

<rewrite> 
<rules> 
    <rule name="Rewrite default to aspx" stopProcessing="true"> 
    <match url="^$" ignoreCase="false" /> 
    <action type="Rewrite" url="default.aspx" /> 
    </rule> 
    <rule name="Rewrite page to aspx" stopProcessing="true"> 
    <match url="^([a-z0-9/]+)$" ignoreCase="false" /> 
    <action type="Rewrite" url="{R:1}.aspx" /> 
    </rule> 
</rules> 
</rewrite> 

páginas en las que necesito para analizar la Identificación (sólo este número de caso) y añadirlo a la cadena de consulta agrego una regla similar a la parte delantera:

<rule name="Rewrite Product ID" stopProcessing="true"> 
    <match url="^product/([0-9]+)$" ignoreCase="false"/> 
    <action type="Rewrite" url="product.aspx?id={R:1}"/> 
</rule> 

Si desea utilizar letras mayúsculas y minúsculas en la URL, establecer ignoreCase = "true"

Edita para responder a tu segunda pregunta más un bonus

Esta regla se redirigirá aspx a la URL limpia:

<rule name="Redirect to clean URL" stopProcessing="true"> 
    <match url="^([a-z0-9/]+).aspx$" ignoreCase="true"/> 
    <action type="Redirect" url="{R:1}"/> 
</rule> 

Reemplazar url = "{R: 1}" con url = "{ToLower: {R: 1}}" para cambiar el URL a minúsculas Vea a continuación por qué querría hacer esto.

También es una buena idea actualizar la acción Formulario para que las publicaciones posteriores no vuelvan a la URL fea. El uso de IIS 7.5 o posterior esto debería funcionar:

if (!String.IsNullOrEmpty(Request.RawUrl)) 
     form1.Action = Request.RawUrl; 

o para IIS 7:

if (!String.IsNullOrEmpty(Context.Request.ServerVariables["HTTP_X_ORIGINAL_URL"])) 
     form1.Action = Context.Request.ServerVariables["HTTP_X_ORIGINAL_URL"]; 

Una cosa más a tener en cuenta ... que es una buena idea para mantener todas las direcciones URL en minúsculas. Mezclar caracteres en mayúscula/minúscula en la URL crea problemas de contenido duplicados para SEO/Google. Por ejemplo, website.com/About y web.com/about cargarán la misma página, pero Google los indexará en dos páginas separadas.

+0

¡Eres el hombre! Solo una cosa si sabes cómo hacerlo, ahora necesito enviarles la URL y agregar el aspx sin que ellos lo vean, pero ¿es posible que si van al .aspx eliminará el .aspx? – Danpe

+1

Se actualizó la respuesta para incluir su segunda pregunta. – Serge

+0

Intenté usar esto para mi URL rewirte en uno de mis proyectos. la extensión de eliminación funciona perfectamente. sin embargo, parece que tengo problemas con las ventanas emergentes de Ajax. en mi Extensor de elementos emergentes de Modal y en los prolongadores de ventanas emergentes del calendario. Levanté un boleto en esto. pero no hay respuesta hasta el momento. http://stackoverflow.com/questions/33243017/url-rewrite-create-compactible-issues-with-ajaxtoolkit – Lemdor

3
<rewrite> 
    <rules> 
      <remove name="RewriteUserFriendlyURL1" /> 
      <remove name="RedirectUserFriendlyURL1" /> 
      <rule name="RedirectUserFriendlyURL2" stopProcessing="true"> 
       <match url="^www\.myserver\.com/(.*)\.aspx$" /> 
       <conditions> 
        <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" /> 
       </conditions> 
       <action type="Redirect" url="www.myserver.com/{R:1}" appendQueryString="false" /> 
      </rule> 
      <rule name="RewriteUserFriendlyURL2" stopProcessing="true"> 
       <match url="^www\.myserver\.com/(.*)$" /> 
       <conditions> 
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
       </conditions> 
       <action type="Rewrite" url="www.myserver.com/{R:1}.aspx" /> 
      </rule> 
     </rules> 
     <outboundRules> 
      <remove name="OutboundRewriteUserFriendlyURL1" /> 
      <rule name="OutboundRewriteUserFriendlyURL2" preCondition="ResponseIsHtml1"> 
       <match filterByTags="A, Form, Img" pattern="^(.*)www\.myserver\.com/(.*)\.aspx$" /> 
       <action type="Rewrite" value="www.myserver.com/{R:1}" /> 
      </rule> 
     </outboundRules> 
</rewrite> 

esto va a hacer que - He generado este respecto IIS en mi máquina local - cambiar myserver.com a su propia URL. puede cambiar la expresión regular para que realmente cuide la parte x.aspx de la url, entonces debería funcionar en todas las páginas

+0

@stack Niza THX, pero quiero que todas las páginas que se ven no es muy agradable sólo el register.aspx , por ejemplo, también tengo Login.aspx y Products.aspx y mucho más. – Danpe

+0

@stack Me y RegEx no van bien juntos xD Así que si me puedes mostrar un ejemplo estaré contento :) – Danpe

+0

prueba la regla actualizada - esto tiene un catch all en lugar de un registro hardcoded - esto necesitará ser probado en todas las páginas para las exclusiones – stack72

5

Primero debe eliminar el archivo .aspx (predeterminado.aspx) y redirigir a predeterminado para cambiar la dirección del navegador y luego añadir el .aspx y volver a colocar a la página usando IIS

<rewrite> 
    <rules> 
     <clear /> 
     <rule name="Redirect to clean URL" enabled="true" stopProcessing="true"> 
      <match url="^([a-z0-9/]+).aspx$" ignoreCase="true" /> 
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false" /> 
      <action type="Redirect" url="{R:1}" /> 
     </rule> 
     <rule name="RewriteASPX" enabled="true"> 
      <match url="(.*)" /> 
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
       <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
       <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
      </conditions> 
      <action type="Rewrite" url="{R:1}.aspx" /> 
     </rule> 
    </rules> 
</rewrite> 
+0

La respuesta de Serge fue informativa, pero usted estaba trabajando. Gracias amigo :) – Jamil

+0

me da el siguiente error Descripción: HTTP 404. El recurso que está buscando (o una de sus dependencias) podría haber sido eliminado, haber cambiado su nombre o no estar disponible temporalmente. Revise la siguiente URL y asegúrese de que esté escrita correctamente. URL solicitada: /collections/.aspx –

Cuestiones relacionadas