2012-12-27 15 views
6

मैं विज़िटर को अपने विशिष्ट पृष्ठ पर रीडायरेक्ट करना चाहता हूं कि वे किस ब्राउज़र का उपयोग कर रहे हैं।.htaccess ब्राउज़र पर आधारित विशिष्ट वेबपृष्ठ पर रीडायरेक्ट

उदाहरण के लिए: सभी आगंतुक पहले http://www.example.com/xy/abc.html पर जाएंगे।

आगंतुक फ़ायरफ़ॉक्स का उपयोग कर रहा है, तो वह http://www.example.com/xy/firefox.html

पर पुनः निर्देशित किया जाना चाहिए आगंतुक क्रोम का उपयोग कर रहा है, वह http://www.example.com/xy/chrome.html

मैं ओपेरा के लिए इस हैंडल करना चाहते हैं पर पुनः निर्देशित किया जाना चाहिए, क्रोम, फ़ायरफ़ॉक्स, आईई, सफारी ब्राउज़र और गैर-पहचान किए गए ब्राउज़र के लिए डिफ़ॉल्ट रीडायरेक्ट के साथ।

कोड के साथ कोई मदद? मैंने तलाश करने की कोशिश की और मुझे जो कुछ मिला वह एक विशिष्ट एक के बजाय सभी ब्राउज़र के लिए एक ही रीडायरेक्ट कोड था।

आपकी सहायता की सराहना की जाती है। धन्यवाद।

उत्तर

11

उपयोगकर्ता एजेंट के रिपोर्ट किए गए नाम के खिलाफ परीक्षण करने के लिए आप mod_rewrite के RewriteCond directive का उपयोग कर सकते हैं। एक .htaccess अपने xy निर्देशिका में रखा फ़ाइल में, यह इस तरह दिखना चाहते हैं:

RewriteCond %{HTTP_USER_AGENT} Opera 
RewriteRule ^abc.html$ http://example.com/xy/opera.html [R=301] 

यह स्थायी रूप से ब्राउज़र अपने उपयोगकर्ता एजेंट स्ट्रिंग opera.html करने में कहीं ओपेरा है कि रीडायरेक्ट करेगा। आप useragentstring.com पर उपयोगकर्ता एजेंटों को स्वयं कैसे पहचानते हैं, इसकी एक सभ्य सूची मिल सकती है। आप देखेंगे कि कई उपयोगकर्ता एजेंट तार वास्तव में "मोज़िला" (कुछ दुष्ट ऐतिहासिक कारणों से) के साथ शुरू होते हैं, लेकिन यह देखने के लिए परीक्षण करते हैं कि स्ट्रिंग में ब्राउज़र का नाम है (आईई "एमएसआईई") पर्याप्त होना चाहिए।

समस्या यह है कि HTTP_USER_AGENT स्ट्रिंग ब्राउज़र द्वारा रिपोर्ट की जाती है, और ब्राउजर बहुत कुछ भी चाहते हैं जो वे चाहते हैं। ओपेरा में आईई या एफएफ के रूप में खुद को मास्कराइड करने के लिए एक अंतर्निहित विकल्प भी है। आम तौर पर, एक अच्छा मौका है कि उपयोगकर्ता एजेंट स्ट्रिंग के आधार पर ब्राउज़र-स्नीफिंग अंततः याद आती है, और फिर उपयोगकर्ता नाराज होगा। मैं दृढ़ता से सुझाव देता हूं कि आप स्वचालित पुनर्निर्देशन को ओवरराइड करने के लिए उपयोगकर्ता को कुछ रास्ता छोड़ दें।

RewriteEngine on 

RewriteCond %{HTTP_USER_AGENT} Opera 
RewriteRule ^abcd.html$ opera.html [NC,L] 

RewriteCond %{HTTP_USER_AGENT} MSIE 
RewriteRule ^abcd.html$ ie.html [NC,L] 

RewriteCond %{HTTP_USER_AGENT} Chrome 
RewriteRule ^abcd.html$ chrome.html [NC,L] 

RewriteCond %{HTTP_USER_AGENT} Safari 
RewriteRule ^abcd.html$ safari.html [NC,L] 

RewriteCond %{HTTP_USER_AGENT} Firefox 
RewriteRule ^abcd.html$ firefox.html [NC,L] 

RewriteRule ^abcd.html$ default.html [L] 

एल झंडा लगता है कि उस नियम, अंतिम कि पास में क्रियान्वित किया जा रहा है, इसलिए यदि एक ब्राउज़र ही रिपोर्ट करता है:


तो, कुछ इस तरह पहली बार एक दृष्टिकोण के रूप में काम कर सकते हैं फ़ायरफ़ॉक्स, सफारी, एमएसआईई और ओपेरा युक्त स्ट्रिंग के साथ, मिलान करने वाला पहला नियम (इस मामले में ओपेरा) लैंडिंग पृष्ठ निर्धारित करेगा। यह संस्करण एक सॉफ्ट रीडायरेक्ट करता है (ब्राउज़र का पता बार नहीं बदलेगा)। यदि आप एक कठिन, आर = 301 रीडायरेक्ट करना चाहते हैं, तो लैंडिंग पृष्ठ के पूरे यूआरएल को स्पेल करना सुनिश्चित करें, यानी RewriteRule ^abcd.html$ http://example.com/xy/opera.html [NC,L,R=301]

+0

धन्यवाद। मैं वास्तव में बहुत चिंतित नहीं हूं कि यह कुछ उपयोगकर्ताओं के लिए विफल रहता है या नहीं। वास्तव में 100% कामकाजी समाधान की उम्मीद नहीं है लेकिन 85% के करीब कुछ भी ठीक होना चाहिए। – vinny

+0

बस स्पष्ट करने के लिए, मैंने यह कोड एक साथ रखा है, क्या यह आपके लिए ठीक दिखता है?
RewriteCond %{HTTP_USER_AGENT} Opera RewriteRule ^abc.html$ opera.html [R=301] RewriteCond %{HTTP_USER_AGENT} Mozilla RewriteRule ^abc.html$ ff.html [R=301]
एक और मुद्दा, क्रोम ने मोज़िला का भी उपयोग किया, जिसका अर्थ है कि रीडायरेक्ट क्रोम उपयोगकर्ताओं के लिए सटीक नहीं होगा। – vinny

+0

एक नमूना कार्यान्वयन जोड़ा गया। मेरी मशीन पर काम करने लगता है, लेकिन यह परीक्षण करने के लिए सुनिश्चित करें :)। –

संबंधित मुद्दे