2011-05-23 14 views
17

'a http://example.com yeniden yazmak için ASP .NET rewriteModule kullanıyorum.RewriteModule kullanılarak sayfalardan .aspx kaldırılıyor mu?

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

Daha sonra bunu <system.webServer> içine aldım.

<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> 

Artık sayfalarımın sonundaki tüm .aspx dosyalarını kaldırmak istiyorum. Örnek:

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

dönüşebilir Will:

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

Bunu nasıl yapabilirim?

IIS7'yi kullanarak GoDaddy'de Paylaşılan Web Hosting'i yapıyorum.

cevap

21

Bunlar, her projeye başladığım standart yeniden yazma kurallarıdır. Ben tüm sayfalar için sadece temiz URL'ler dışarı ayrıştırmak gerekiyor

<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> 

Sayfalar (örneğin ilk kural www.example.com/about ve ikinci kural www.example.com/product/123 için çalışır) kullanın kimlik (bu durumda sayı için) ve cepheye benzer bir kural eklemek sorgu dizesi ekleyin:

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

Eğer ignoreCase = "true" set URL içinde alt ve üst harf kullanmak istiyorsanız

İkinci soruya cevap vermek için düzenleyin, ayrıca bir bonus

Bu kural temiz URL'ye aspx sayfasını yönlendirir

:

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

= url değiştir "{R: 1}" ile url = "{ToLower: {R: 1}}" URL'sini değiştirmek için küçük harfle Bunu neden yapmak istediğinize bakın.

Ayrıca, Form eylemini güncellemek iyi bir fikirdir, böylece posta arkaları çirkin URL'ye geri dönmez. Bu çalışması gerekir IIS 7.5 veya daha yeni kullanma:

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

veya IIS 7 için

:

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

Bir şey daha akılda tutulması gereken ... hepsi URL'ler küçük harf tutmak iyi bir fikirdir. URL'deki alt/büyük harf karakterlerini karıştırmak, SEO/Google için yinelenen içerik sorunları oluşturur. Örneğin, website.com/About ve website.com/about aynı sayfayı yükleyecek, ancak Google bunları iki ayrı sayfa olarak dizinleyecektir.

+0

Siz adamsınız! Nasıl yapılacağını biliyorsanız, sadece bir şey, şimdi onları toex URL'ye göndermek gerekir ve onlar görünmeden aspx ekler, ancak .aspx'e giderlerse, .aspx'i kaldırabilecek midir? – Danpe

+1

Cevabınızı ikinci sorunuzu içerecek şekilde güncelledik. – Serge

+0

URL'lerim için bunu projelerimden birinde kullanmaya çalıştım. kaldırma uzatma mükemmel bir şekilde bozulur. Ancak, Ajax'ın pop-up'ları ile ilgili sorunlar alıyorum. benim Modal Popup genişletici ve takvim genişletici extenders.i bu konuda bir bilet yükseltmek. ama şimdiye kadar cevap yok. 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> 

bu yapacak - Bu vis yarattı benim yerel makinede IIS - kendi URL'ye myserver.com değiştirin. url'nin x.aspx kısmına bakacak regex'i değiştirebilirsiniz, o zaman tüm sayfalarda çalışması gerekir.

+0

@stack Güzel thx kullanarak sayfaya rewire varsayılan yönlendirme yapar, ancak ben tüm sayfaları sadece Register.aspx dostu değil bakmak istiyorum örneğin, ben de Login.aspx ve Products.aspx ve çok daha fazlası var. – Danpe

+0

@stack Me ve RegEx birlikte iyi gitmiyor xD Eğer bana bir örnek gösterebilirseniz mutlu olacağım :) – Danpe

+0

güncellenmiş kuralı deneyin - bu, sabit kodlu kayıt yerine tümünü yakalama - bu sayfalar arasında test edilmesi gerekir istisnalar için – stack72

5

İlk önce .aspx (varsayılanını kaldırmanız gerekir.aspx) ve daha sonra tarayıcı adresini değiştirmek .aspx ekleyip 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

Serge'in cevabı bilgilendiriciydi, ama çalışıyordu. Tesekkurler dostum. :) – Jamil

+0

bana hata bildirimini ver. Açıklama: HTTP 404. Aradığınız kaynak (veya bağımlılıklarından biri) kaldırılmış olabilir, adı değiştirilmiş veya geçici olarak kullanılamıyor olabilir. Lütfen aşağıdaki URL'yi inceleyin ve doğru yazıldığından emin olun. İstenen URL: /collections/.aspx –

İlgili konular