2011-11-11 12 views
18

यदि उपयोगकर्ता मेरी साइट के रूट यूआरएल पर जा रहा है तो मैं कुछ स्क्रिप्ट को आग लगाना चाहता हूं।यह कैसे जांचें कि उपयोगकर्ता साइट के रूट यूआरएल पर जा रहा है या नहीं?

उदाहरण के लिए, मैं मेरे विचार में कुछ करना चाहता हूँ जब उपयोगकर्ता का दौरा कर रहा है

  • www.example.com
  • example.com
  • www.example.com/
  • http://www.example.com
  • http://example.com

... [उपरोक्त के विभिन्न संयोजन।]

और www.example.com/anything else के लिए नहीं।
एएसपी.नेट एमवीसी 3 [रेजर] वेबसाइट और जावास्क्रिप्ट के दृश्य पृष्ठ में इसे जांचने का सबसे सुरक्षित तरीका क्या है? साथ ही, केवल जावास्क्रिप्ट का उपयोग करने का कोई तरीका है?
धन्यवाद।

उत्तर

51

सबसे आसान जावास्क्रिप्ट विधि है: के बाद से पथ नाम क्वेरी स्ट्रिंग और स्थान हैश शामिल नहीं

var is_root = location.pathname == "/"; //Equals true if we're at the root 

भी http://example.com/?foo=bar#hash सही परिणाम का उत्पादन करेगा, ।

var is_root =/^\/(?:|index\.aspx?)$/i.test(location.pathname); 

पिछली लाइन एक नियमित रूप से उपयोग कर रहा है:

http://anything-but-a-slash/     Root 
          /?querystring  Root 
          /#hash    Root 
          /page    Not root 

आप अपने रूट फ़ोल्डर में इंडेक्स फ़ाइल (रों) है, तो निम्न उदाहरण पर एक नजर है:

एक नज़र अभिव्यक्ति। विशेष पात्रों को बचाना होगा, /i पोस्टफिक्स पैटर्न केस-असंवेदनशील बनाता है। यदि आप केस से मेल खाना चाहते हैं, तो i ध्वज छोड़ दें।

उसी रेगुलर एक्सप्रेशन रेखांकन प्रस्तुत:

Regular expression visualization

+0

पूरी तरह से उत्तर के लिए धन्यवाद। – Kamyar

+0

यदि आपको स्थानीयहोस्ट के लिए भी समर्थन की आवश्यकता है, तो यह कोशिश करें, जहां/साइट/परियोजना var is_root = (window.location.pathname == "/" || window.location.pathname == "/ साइट /") का प्रतिनिधित्व करती है? सही गलत; – afreeland

+0

@afreeland 'http: // localhost/site /', 'location.pathname' के लिए'/Site/'दिखाता है। यदि आप किसी वेबसाइट का अस्थायी परीक्षण करना चाहते हैं, तो आप रूट को फिर से लिखने के लिए बेहतर रूप से '.htaccess' का उपयोग करेंगे। देखें: http://pastebin.com/4ZJzKJkE। साथ ही, 'a == b' पहले से ही एक बूलियन लौटाता है,' (a == b? True: false) 'का उपयोग करने की कोई आवश्यकता नहीं है। –

0
की तरह एक नियमित अभिव्यक्ति के साथ

:

(/^https?\:\/\/[^\/]+\/?$/).test(window.location.href)

+3

बहुत आसान लगता है 'window.location.pathname' उपयोग करने के लिए। – jfriend00

+0

यह सच है :) – Mic

+0

@ रेजीक्स के साथ थोड़ा उलझन में आप कृपया इसे संक्षिप्त कर सकते हैं? – Praveen

0

मुझे लगता है कि

if(window.location == window.location.hostname) { 
    //is root 
} 

संपादित करें: इसका उपयोग न करें, देखें टिप्पणी

+1

धन्यवाद। लेकिन 'window.location.hostname' पोर्ट नंबरों का सम्मान नहीं करता है। तो देव में, यदि आप 80 से अधिक के पोर्ट नंबर पर हैं, तो आपको झूठे परिणाम मिलेंगे। – Kamyar

+1

@ कामर: आप सही हैं, धन्यवाद – Andre

1

इस और अधिक मजबूत नियमित अभिव्यक्ति का प्रयास करें :

Regex

var isRoot =/^(\/|\/index\.asp|\/index\.aspx)$/i.test(location.pathname); 


विवरण

Regular expression visualization


डेमो

Debuggex Demo

0

"/" के पथनाम के लिए परीक्षण विफल रहा जब मैंने अपने ऑनलाइन आईडीई से डीबग/पूर्वावलोकन मोड में अपना ऐप चलाया। दूसरे शब्दों में यह सामान्य रूप से एक स्वच्छ यूआरएल (.html) के साथ परोसा जाता है, जब मैं इसे क्लाउड 9 से सेवा करता हूं, इस मामले में इसे index.html के साथ परोसा जाता है।

तो, यह मेरे लिए काम कर रहा है:

if(window.location.pathname.length == 1 || window.location.pathname.length == 0 || window.location.pathname === "/index.html" || window.location.pathname === "/index"){ //I'm at the app root }

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