2009-02-06 13 views
14

मैं एएसपी.NET 2.0 सी # का उपयोग कर रहा हूं। मैं "www" के बिना करने के लिए "www" के साथ अपने वेब अनुप्रयोग के लिए सभी अनुरोध रीडायरेक्ट करना चाहते हैं"www" URL के बिना "www" URL के बिना रीडायरेक्ट कैसे करें या इसके विपरीत?

www.example.com example.com

या

example.com को www.example.com के लिए

Stackoverflow.com पहले से ही यह कर रहा है, मुझे पता है कि PHP (.htaccess) फ़ाइल में एक प्रीमियर तंत्र है। लेकिन एएसपीनेट में इसे कैसे करें?

धन्यवाद

+1

यह "विहित नाम" कहा जाता है, तो आप कहीं और उसे ढूंढने की कामना करते हैं। –

+3

यह जानना महत्वपूर्ण है कि यदि आप www (या कुछ अन्य सबडोमेन) का उपयोग नहीं करते हैं तो सभी कुकीज़ प्रत्येक सबडोमेन एमडीडी में जमा की जाएंगी, इसलिए आप स्थिर सामग्री की सेवा के लिए कुकी-कम सबडोमेन नहीं पाएंगे जिससे इस प्रकार कम हो जाता है ब्राउज़र और सर्वर के बीच आगे और पीछे भेजे गए डेटा की मात्रा। बाद में आपको खेद हो सकता है: http://twitter.com/codinghorror/statuses/1637428313 –

+1

@Diodeus - क्या हमें इसके लिए वास्तव में एक टैग चाहिए? – theycallmemorty

उत्तर

6

मैं अतीत में निम्न समाधान के साथ गया हूं जब मैं आईआईएस सेटिंग्स को संशोधित करने में सक्षम नहीं हूं।

या तो एक HTTP मॉड्यूल (शायद सबसे साफ), या global.asax.cs में Application_BeginRequest में या कुछ बेसपेज प्रकार की घटनाओं में, जैसे ऑनइनिट I अनुरोधित यूआरएल के खिलाफ एक जांच करता है, एक ज्ञात स्ट्रिंग के साथ मैं उपयोग करना चाहता हूं:

public class SeoUrls : IHttpModule 
{ 
    #region IHttpModule Members 

    public void Init(HttpApplication context) 
    { 
     context.PreRequestHandlerExecute += OnPreRequestHandlerExecute; 
    } 

    public void Dispose() 
    { 
    } 

    #endregion 

    private void OnPreRequestHandlerExecute(object sender, EventArgs e) 
    { 
    HttpContext ctx = ((HttpApplication) sender).Context; 
    IHttpHandler handler = ctx.Handler; 

    // Only worry about redirecting pages at this point 
    // static files might be coming from a different domain 
    if (handler is Page) 
    { 
     if (Ctx.Request.Url.Host != WebConfigurationManager.AppSettings["FullHost"]) 
     { 
     UriBuilder uri = new UriBuilder(ctx.Request.Url); 

     uri.Host = WebConfigurationManager.AppSettings["FullHost"]; 

     // Perform a permanent redirect - I've generally implemented this as an 
     // extension method so I can use Response.PermanentRedirect(uri) 
     // but expanded here for obviousness: 
     response.AddHeader("Location", uri); 
     response.StatusCode = 301; 
     response.StatusDescription = "Moved Permanently"; 
     response.End(); 
     } 
    } 
    } 
} 

फिर अपने web.config में वर्ग रजिस्टर:

<httpModules> 
    [...] 
    <add type="[Namespace.]SeoUrls, [AssemblyName], [Version=x.x.x.x, Culture=neutral, PublicKeyToken=933d439bb833333a]" name="SeoUrls"/> 
</httpModules> 

इस विधि हमारे लिए काफी अच्छी तरह से काम करता है।

24

इसके बारे में एक स्टैक ओवरफ्लो ब्लॉग पोस्ट है।

http://blog.stackoverflow.com/2008/06/dropping-the-www-prefix/

जेफ का हवाला देते हुए:

यहाँ आने वाले सभी URL से WWW उपसर्ग दूर करने के लिए IIS7 नियम है। कट और

<system.webServer>/<rewrite>/<rules> 

<rule name="Remove WWW prefix" > 
<match url="(.*)" ignoreCase="true" /> 
<conditions> 
<add input="{HTTP_HOST}" pattern="^www\.domain\.com" /> 
</conditions> 
<action type="Redirect" url="http://domain.com/{R:1}" 
    redirectType="Permanent" /> 
</rule> 

के तहत अपने web.config फ़ाइल में इस XML टुकड़ा पेस्ट या, आप www उपसर्ग का उपयोग करना पसंद करते हैं, तो आप ऐसा भी कर सकते हैं:

<rule name="Add WWW prefix" > 
<match url="(.*)" ignoreCase="true" /> 
<conditions> 
<add input="{HTTP_HOST}" pattern="^domain\.com" /> 
</conditions> 
<action type="Redirect" url="http://www.domain.com/{R:1}" 
    redirectType="Permanent" /> 
</rule> 
+0

दरअसल समस्या यह है कि मैं गोडाडी के साझा होस्टिंग सर्वर पर हूं, जहां मुझे आईआईएस सेटिंग्स को संशोधित करने की सुविधा नहीं है। :(यही कारण है कि मैं एएसपी.नेट, टैग इत्यादि के माध्यम से एक प्रक्रिया पूछ रहा हूं, – Prashant

+2

शायद मुझे कुछ याद आ रही है, लेकिन आपके स्वीकृत उत्तर के लिए आपको web.config को संशोधित करने की आवश्यकता है। मेरे उत्तर में आपको web.config को संशोधित करने की भी आवश्यकता है। – shsteimer

0

यह आमतौर पर कॉन्फ़िगरेशन में सीधे आपके वेब सर्वर द्वारा संभाला जाता है। जैसा कि आपने बताया है, .htaccess फ़ाइल यह अपाचे वेब सर्वर के लिए करती है - इसका PHP के साथ कुछ लेना देना नहीं है। चूंकि आप एएसपी का उपयोग कर रहे हैं, यह निश्चित रूप से निश्चित है कि आपका सर्वर आईआईएस है। मुझे पता है कि आईआईएस के साथ इसे सीधे स्थापित करने का एक तरीका है, लेकिन मुझे नहीं पता कि यह क्या है। आपको "आईआईएस रीडायरेक्ट" से संबंधित चीजों के लिए गुगल करना चाहिए, न कि "एएसपी रीडायरेक्ट" के लिए आपको अपनी खोज में सहायता मिल सकती है।

यह कहा गया है कि आप इसे PHP में कर सकते हैं, और लगभग निश्चित रूप से एएसपी भी कर सकते हैं, लेकिन आपको गलत डोमेन पर किसी भी यूआरएल को मारना होगा एएसपी स्क्रिप्ट का आह्वान करना जो रीडायरेक्ट ऑपरेशन करता है (उचित एपीआई कॉल का उपयोग करके या सीधे हेडर सेट करके)। इसके लिए सर्वर के कुछ हिस्सों में कुछ यूआरएल रीराइटिंग या कुछ की आवश्यकता होगी ताकि गलत होस्ट पर सभी यूआरएल आपकी स्क्रिप्ट द्वारा संभाले जा सकें ... बस इसे सीधे पहले सर्वर पर करें :)

0

हमने यह किया आईआईएस 6 पर काफी सरलता से। हमने अनिवार्य रूप से एक दूसरा आभासी सर्वर बनाया जिस पर कस्टम 404 पेज .aspx पृष्ठ से कुछ भी नहीं था। इस पृष्ठ ने WHATEVERSERVER.com/whateverpage.aspx के लिए कोई अनुरोध पकड़ा और URL को www.whateverserver.com/whateverpage.aspx के रूप में बदलकर वास्तविक सर्वर पर रीडायरेक्ट किया।

सेटअप करने के लिए बहुत आसान है, और इसका लाभ यह है कि यह किसी भी डोमेन के साथ काम करेगा (यदि आपके पास उदाहरण के लिए एकाधिक डोमेन हैं) प्रत्येक के लिए अतिरिक्त नियम सेट किए बिना। तो www.myoldserver.com/xxx के लिए किसी भी अनुरोध को www.whateverserver.com/xxx

आईआईएस 7 में रीडायरेक्ट किया जाएगा, यह सब यूआरएल लेखन घटक के साथ किया जा सकता है, लेकिन हम रीडायरेक्ट को बंद रखना पसंद करते हैं इस आभासी सर्वर पर।

+0

दरअसल समस्या यह है कि मैं गोडाडी के साझा होस्टिंग सर्वर पर हूं, जहां मुझे आईआईएस सेटिंग्स को संशोधित करने की सुविधा नहीं है। :(यही कारण है कि मैं एएसपी.नेट, टैग आदि के माध्यम से एक प्रक्रिया पूछ रहा हूं। – Prashant

5

स्वीकार्य उत्तर एक ही यूआरएल या कुछ ही के लिए काम करता है, लेकिन मेरा आवेदन सैकड़ों डोमेन नामों (मैन्युअल रूप से दर्ज करने के लिए बहुत सारे यूआरएल हैं) परोसता है।

यहां मेरा आईआईएस 7 यूआरएल रिवाइट मॉड्यूल नियम है (यहां एक्शन टाइप वास्तव में एक 301 रीडायरेक्ट है, न कि "पुनः लिखना")। बढ़िया काम करता है:

वर्ल्ड वाइड वेब: n

<rule name="Add WWW prefix" > 
    <match url="(.*)" ignoreCase="true" /> 
    <conditions> 
    <add input="{HTTP_HOST}" negate="true" pattern="^www\.(.+)$" /> 
    </conditions> 
    <action type="Redirect" url="http://www.{HTTP_HOST}/{R:1}" 
     appendQueryString="true" redirectType="Permanent" /> 
</rule> 
+0

जब मैं इस नियम को आजमाता हूं रीडायरेक्ट के साथ "http: // www। {HTTP_HOST}/{R: 1}", कुछ भी नहीं होता है। अगर मैं वास्तविक डोमेन नाम में "{HTTP_HOST}" बदलता हूं, तो यह काम करता है। क्या मुझे कुछ और बदलने की ज़रूरत है तो नियम "{HTTP_HOST}" का उपयोग कर काम करता है। धन्यवाद। –

+0

क्या स्थिति और कार्य बिल्कुल वही लिखा गया है? –

2

आदेश में इस सवाल का जवाब देने के लिए, हम पहले WWW की परिभाषा को याद करना चाहिए। Abbr। डब्ल्यूडब्ल्यूडब्लू

  • HTTP प्रोटोकॉल का उपयोग करने वाले सभी इंटरनेट सर्वरों पर रहने वाले दस्तावेज़ों का पूरा सेट, जो कि एक साधारण बिंदु-और-क्लिक सिस्टम के माध्यम से उपयोगकर्ताओं के लिए सुलभ है।
  • n: हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल के माध्यम से टेक्स्ट और ग्राफिक्स और ध्वनि और एनीमेशन संसाधन प्रदान करने वाली इंटरनेट साइटों का संग्रह। डिफ़ॉल्ट रूप से, सभी लोकप्रिय वेब ब्राउज़र HTTP प्रोटोकॉल मानते हैं। ऐसा करने में, सॉफ़्टवेयर अनुरोधित यूआरएल पर 'http: //' को प्रीपेड करता है और स्वचालित रूप से पोर्ट 80 पर HTTP सर्वर से कनेक्ट होता है। फिर कई सर्वरों को अपनी वेबसाइटों को www सबडोमेन के माध्यम से संवाद करने की आवश्यकता क्यों होती है? मेल सर्वर आपको प्राप्तकर्ता@mail.domain.com पर ईमेल भेजने की आवश्यकता नहीं है। इसी तरह, वेब सर्वर को अपने पृष्ठों तक पहुंच की अनुमति देनी चाहिए, हालांकि मुख्य डोमेन जब तक कोई विशेष सबडोमेन आवश्यक न हो।

संक्षेप में, www सबडोमेन का उपयोग अनावश्यक है और संवाद करने में समय लगता है। इंटरनेट, मीडिया और समाज इसके बिना सभी बेहतर हैं।

पृष्ठ के शीर्ष पर दिए गए लिंक का उपयोग करके, आप हाल ही में मान्य डोमेन देख सकते हैं साथ ही वास्तविक समय सत्यापन के लिए डोमेन सबमिट कर सकते हैं।

अपाचे वेबसर्वर:

RewriteEngine On 
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
RewriteRule ^(.*)$ http://%1/$1 [R=301,L] 

विंडोज सर्वर/आईआईएस: कोई तरीका नहीं है।

आप Url Rewriter from Code Plex का उपयोग कर सकते हैं। एक ही वाक्यविन्यास के साथ।

RewriteCond %{HTTP_HOST} !^(www).*$ [NC] 
RewriteRule ^(.*)$ http://www.%1$1 [R=301] 

Source

0

मामले में आप आईआईएस 7 का उपयोग कर रहे हैं, बस URL रीराइट पर जाएँ और विहित डोमेन नाम नियम जोड़ें।

पीएस यह सुनिश्चित करने के लिए कि आप डोमेन.com से www.domain पर रीडायरेक्ट हो जाएं।कॉम

0

इस संस्करण होगा:

  1. बनाए रखें भेजे अनुरोध के HTTP/HTTPS।
  2. यदि आपको आवश्यकता हो तो विभिन्न होस्ट्स का समर्थन करें (उदाहरण के लिए एक बहु-किरायेदार ऐप जो डोमेन द्वारा किरायेदार को अलग करता है)।

<rule name="Redirect to www" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions trackAllCaptures="true"> 
    <add input="{CACHE_URL}" pattern="^(.+)://" /> 
    <add input="{HTTP_HOST}" negate="true" pattern="^www\.(.+)$" /> 
    </conditions> 
    <action type="Redirect" url="{C:1}://www.{HTTP_HOST}/{R:1}" /> 
</rule> 
संबंधित मुद्दे