Geçerli Etki Alanı Adını Javascript ile Alın (Yol vb. Değil)


246

Aynı site için iki alan adı satın almayı planlıyorum. Hangi alanın kullanıldığına bağlı olarak, sayfada biraz farklı veriler sağlamayı planlıyorum. İçeriğimin neyi değiştireceğimi bilmem için sayfanın yüklendiği gerçek alan adını tespit etmemin bir yolu var mı?

Bunun gibi şeyleri araştırdım ama çoğu istediğim gibi çalışmıyor.

Örneğin,

document.write(document.location)

üzerinde JSFiddle Döndürdüğü

http://fiddle.jshell.net/_display/

yani gerçek yol ya da her neyse.


1
Tam olarak ne yapmak istediğinizi anladığımdan emin değilim, ancak muhtemelen bu konuda MDN'ye bir göz atmalısınız
MilkyWayJoe

Biraz konu, ancak iki ayrı alan adı yerine alt alan adlarına sahip olmayı da düşünebilirsiniz. Gibi bir şey premium.random.comvefree.random.com
T.Chmelevskij

Yanıtlar:


456

Nasıl olur:

window.location.hostname

locationNesne aslında bir sahiptir dizi özelliği URL'nin farklı kesimlerine atıfta


55
ve window.location.hostnamesen almak istemiyorsanız portgibi ( http://localhost:3000/, window.location.host = 'localhost:3000'vewindow.location.hostname = 'localhost'
Guilherme

6
Bağlantı noktası etki alanına ait olmadığından yanıt yanlış. Ve window.location.hostbazen limanı geri verecektir.
Andrej

4
Bu aynı zamanda sunucu adını da döndürür (sadece '.amazingjokes.com' yerine 'www.amazingjokes.com')
patrick

DNS iletmeniz varsa buna ihtiyacınız olabilir - window.location.ancestorOrigins
Kirill Gusyatin

126

Komut dosyasında çalıştırmayı deneyin: path: http: // localhost: 4200 / landing? Query = 1 # 2

console.log(window.location.hash)

Konum aşağıdaki değerlere sahiptir:

window.location.hash: "#2"

window.location.host: "localhost:4200"

window.location.hostname: "localhost"

window.location.href: "http://localhost:4200/landing?query=1#2"

window.location.origin: "http://localhost:4200"

window.location.pathname: "/landing"

window.location.port: "4200"

window.location.protocol: "http:"

window.location.search: "?query=1"

3
Bu harika bir cevap!
Andrew Campbell

2
Birkaç örnekle cevapları seviyorum. Çok çok teşekkür ederim.
Magno Alberto

24

Ana bilgisayar adıyla (örneğin www.beta.example.com) değil, alan adıyla (örneğin example.com) ilgileniyorsanız , bu geçerli ana bilgisayar adları için çalışır:

function getDomainName(hostName)
{
    return hostName.substring(hostName.lastIndexOf(".", hostName.lastIndexOf(".") - 1) + 1);
}

13
Yanlış, bu neredeyse tüm uluslararası TLD'leri bozacaktır.
tbranyen

4
@tbranyen ne demek istediğini açıklayabilir misin? Düşünebildiğim tek vaka, alt alan adları amazon.co.uk. Ama kesinlikle "neredeyse tüm uluslararası TLD'ler" değil. Aslında Wikipedia'da bulunan ülke kodlarının
cprcrack

1
cprcrack herhangi bir nedenle daha uluslararası (amerika'ya) tlds birden fazla nokta içerdiğini düşündüm. Düzelttiğiniz için teşekkürler!
tbranyen

Bazı ülkeler İngiltere'ye benzer şekilde çalışır: sabit ikinci düzey alan adları vardır ve yalnızca üçüncü düzeyde alan adı kaydedebilirsiniz. Bu ülkelerin bir listesi Wikipedia'da .
Gareth

18
function getDomain(url, subdomain) {
    subdomain = subdomain || false;

    url = url.replace(/(https?:\/\/)?(www.)?/i, '');

    if (!subdomain) {
        url = url.split('.');

        url = url.slice(url.length - 2).join('.');
    }

    if (url.indexOf('/') !== -1) {
        return url.split('/')[0];
    }

    return url;
}

Örnekler

Önceki sürüm tam alan adı alıyordu (alt alan dahil). Şimdi tercihe bağlı olarak doğru etki alanını belirler. Böylece, 2. bağımsız değişken doğru olarak sağlandığında alt etki alanını içerecektir, aksi takdirde yalnızca 'ana etki alanını' döndürür


1
Bu cevap olmalı, hatta işe yarıyor localhost/test.phpve doğru cevap bu localhost.
Mohammad AlBanna

Aynı zamanda en iyi cevaptır, çünkü sadece geçerli
pencere ile

Bunu sizin google.co.ukiçin yaparsanız, doğru olmayan 'co.uk' alırsınız ...
James Douglas

Evet. Bu zor bir iş. Alt alanlarınız da varsa daha zorlayıcı (örneğin: test.google.co.uk). Bu ham sürümü kullanmak istiyorsanız, bazı ciddi ayarlamalar gereklidir (belki de bu tld'ler için özel bir liste ekleyerek).
adelineu

10

Javascript'teki konum nesnesinden kolayca alabilirsiniz:

Örneğin, bu sayfanın URL'si:

http://www.stackoverflow.com/questions/11401897/get-the-current-domain-name-with-javascript-not-the-path-etc

Ardından konum nesnesinin aşağıdaki özellikleriyle tam etki alanını alabiliriz:

location.host = "www.stackoverflow.com"
location.protocol= "http:"

tam etki alanını aşağıdakilerle yapabilirsiniz:

location.protocol + "//" + location.host

Bu örnekte hangisi döner http://www.stackoverflow.com

Ben ek olarak biz tam URL ve ayrıca konum nesnesi diğer özellikleri ile yol alabilirsiniz:

location.href= "http://www.stackoverflow.com/questions/11401897/get-the-current-domain-name-with-javascript-not-the-path-etc"    
location.pathname= "questions/11401897/get-the-current-domain-name-with-javascript-not-the-path-etc"

7

Yalnızca alan adı ilgilenen ve daha sonra alt alan görmezden istiyorsanız size bunu ayrıştırmak gerekir hostve hostname.

Aşağıdaki kod bunu yapar:

var firstDot = window.location.hostname.indexOf('.');
var tld = ".net";
var isSubdomain = firstDot < window.location.hostname.indexOf(tld);
var domain;

if (isSubdomain) {
    domain = window.location.hostname.substring(firstDot == -1 ? 0 : firstDot + 1);
}
else {
  domain = window.location.hostname;
}

http://jsfiddle.net/5U366/4/


Neden jsFiddle yerine jShell döndürüyor?
Freesnöw

2
@XanderLamkins: bir iframe: jsfiddle.net/5U366 <-> fiddle.jshell.net/5U366/show
Saxoier

7

Bu soru ana bilgisayar adını değil , alan adını istediğinden , doğru bir cevap olmalıdır.

window.location.hostname.split('.').slice(-2).join('.')

Bu, www.example.com gibi ana bilgisayar adları için de geçerlidir.


1
Bu çalışır ancak domain.co.uk, domain.com.br gibi alan adlarıyla çalışmaz. Nasıl herhangi bir alan adıyla çalışmasını sağlayabilirim?
Sameh

6

kullanım

document.write(document.location.hostname)​

window.locationbir grup özelliğe sahiptir. Bunların bir listesi için buraya bakın .


5

Alan adının tam olmasını istiyorsanız bunu kullanabilirsiniz:

document.location.origin

Ve yalnızca alan adını almak istiyorsanız, şunu kullanın:

document.location.hostname

Ancak başka seçenekleriniz var, aşağıdaki özelliklere bakın:

document.location

5

Bu fonksiyon ne olacak?

window.location.hostname.match(/\w*\.\w*$/gi)[0]

Bu, bir alt alan adı veya ana alan adı olsun, yalnızca alan adıyla eşleşir


1
Bu cevabı beğendim. Ancak, güvenlikle ilgili amaçlar için kullanılıyorsa, atlanabileceğini bilmelisiniz. Yani example.com'da olduğunuzdan emin olmak istiyorsanız, hacker-example.com da 'example.com'a eşit olacaktır. window.location.hostname.match (/ [a-zA-Z0-9 -] * \. [a-zA-Z0-9 -] * $ /) [0] çalışır.
hiburn8

4

JavaScript'te alan adı almak istiyorsanız, aşağıdaki kodu kullanın:

var domain_name = document.location.hostname;
alert(domain_name);

Web URL yoluna erişebilmek için web sayfası URL yoluna ihtiyacınız varsa bu örneği kullanın:

var url = document.URL;
alert(url);


1

JavaScript'te yeniyim, ancak şunu kullanamazsınız: document.domain ?

Misal:

<p id="ourdomain"></p>

<script>
var domainstring = document.domain;
document.getElementById("ourdomain").innerHTML = (domainstring);
</script>

Çıktı:

domain.com

veya

www.domain.com

Web sitenizde ne kullandığınıza bağlı olarak.


0

Bunun kadar basit olması gerektiğini düşünüyorum:

url.split("/")[2]


Benim için çalışıyor. Önceki çözümler belge, konum veya pencere nesnesine dayanıyordu.
Cris

0

Yukarıdakilerden birkaç cevabı birleştirerek, aşağıdakiler Çerezleri yok etmek için gerçekten iyi çalışıyor:

  /**
   * Utility method to obtain the domain URI:
   */
  fetchDomainURI() {
    if (window.location.port.length > 0) {
      return window.location.hostname;
    }
    return `.${window.location.hostname.match(/\w*\.\w*$/gi)[0]}`;
  }

IP örneğin bağlantı noktalarıyla adresleri, 0.0.0.0:8000 vb yanı sıra gibi karmaşık alan adları için Works app.staging.example.comdönen .example.com=> alanlar arası Çerez ayarı ve yok etmek için izin verir.


0

Ülke alan adının olmasını istiyorsanız - örneğin   , stackoverflow.com'dan .com ayıklayın  :

(ES6):

const getCountryDomainName = () => {
  let hostName = window.location.hostname;
  let lastDotIndex = hostName.lastIndexOf('.');
  let countryDomainName = hostName.substr(lastDotIndex+1, hostName.length);
  return countryDomainName;
}

(ES5):

function getCountryDomainName() {
  let hostName = window.location.hostname;
  let lastDotIndex = hostName.lastIndexOf('.');
  let countryDomainName = hostName.substr(lastDotIndex+1, hostName.length);
  return countryDomainName;
}

Ardından, değeri bir var değerine atamak için işlevi kullanın:

const countryDomainName = getCountryDomainName();

-2
       Feel free to visit our “<a href="javascript:document.location.href=document.location.origin+'/contact-us'" title="Click to Contact Us" class="coded_link" ><span class="ui-icon ui-icon-newwin"></span>Contact</a>” link

Gerçekten benim için çalıştı, ben PHP kullanamadım

Sadece bazı cevaplarda yukarıda belirtilen yaklaşım sayesinde işe yaradığını test etti, çok hızlı ve doğrulandı


@Brandito Teşekkürler, iyi bir site AWS sanal konakta barındırıldı Wordpress kullanarak inanıyorum ve neden bu şekilde yapmak için problemler verdiğini bilmiyorum ... Yanlış yönlendirme veya bunun yapılması gereken bir şey olup olmadığından emin değilim arka uç mod yeniden yazma kuralları ile .. Artı Ben onunla birlikte bir jquery ui temalı lolip ve simge kullanmak istedim. Öncelikle müşteri tarafından onaylandı: '-)
Jean Paul AKA el_vete
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.