私はURL http://somesubdomain.domain.com を持っています(サブドメインは異なる場合があり、ドメインは常に同じです)。サブドメインを取得し、greasemonkeyを使用してdomain.com/some/path/here/somesubdomainなどのページをリロードする必要があります(またはURL domain.com/some/path/here/somesubdomainで新しいウィンドウを開きます)。
var full = window.location.Host
//window.location.Host is subdomain.domain.com
var parts = full.split('.')
var sub = parts[0]
var domain = parts[1]
var type = parts[2]
//sub is 'subdomain', 'domain', type is 'com'
var newUrl = 'http://' + domain + '.' + type + '/your/other/path/' + subDomain
window.open(newUrl);
Derekが提供する回答は、最も一般的なケースでは機能しますが、「xxx.xxx」サブドメインや「Host.co.uk」では機能しません。 (また、window.location.Hostを使用すると、処理されないポート番号も取得されます: http://www.w3schools.com/jsref/prop_loc_Host.asp )
正直なところ、この問題の完全な解決策はありません。個人的には、ホスト名を分割する方法を作成しました。これは、多数のホスト名をカバーするため、私が頻繁に使用する方法です。
このメソッドは、ホスト名を{domain: "", type: "", subdomain: ""}
に分割します
function splitHostname() {
var result = {};
var regexParse = new RegExp('([a-z\-0-9]{2,63})\.([a-z\.]{2,5})$');
var urlParts = regexParse.exec(window.location.hostname);
result.domain = urlParts[1];
result.type = urlParts[2];
result.subdomain = window.location.hostname.replace(result.domain + '.' + result.type, '').slice(0, -1);;
return result;
}
console.log(splitHostname());
このメソッドは、サブドメインのみを文字列として返します。
function getSubdomain(hostname) {
var regexParse = new RegExp('[a-z\-0-9]{2,63}\.[a-z\.]{2,5}$');
var urlParts = regexParse.exec(hostname);
return hostname.replace(urlParts[0],'').slice(0, -1);
}
console.log(getSubdomain(window.location.hostname));
// for use in node with express: getSubdomain(req.hostname)
これらの2つの方法は、ほとんどの一般的なドメイン(co.ukを含む)で機能します[〜#〜]注[〜#〜]:slice
サブドメインの最後には、余分なドットを削除します。
これで問題が解決することを願っています。
ここで提供されているソリューションは、どこかで機能することもありますが、ほとんどの場合は機能します。私の知る限りでは、anyドメインの完全なサブドメインを見つける最良の方法(そして、サブドメインにもピリオドが含まれていることがあります!サブサブドメインがあるなど)は、Mozillaによって管理されている Public Suffix List を使用することです。
パブリックサフィックスリストにないURLの部分は、ドットで結合されたサブドメインとドメイン自体です。パブリックサフィックスを削除したら、ドメインを削除して、ドット間の最後のセグメントを削除することでサブドメインだけを残すことができます。
複雑な例を見てみましょう。 sub.sub.example.pvt.k12.ma.us
をテストしているとします。 pvt.k12.ma.us
はパブリックサフィックスです。信じられないかもしれませんが、したがって、公開サフィックスリストを使用した場合、既知のサフィックスを削除することで、それをsub.sub.example
にすばやく変換できます。次に、残りの部分の最後の部分、つまりドメインを取り除いた後、sub.sub.example
からsub.sub
に移動できます。 sub.sub
はサブドメインです。
これは、@ jlbangが言及している場合を除いて、ほとんどの場合に機能します
const split=location.Host.split(".");
let subdomain="";
let domain="";
if(split.length==1){//localHost
domain=split[0];
}else if(split.length==2){//sub.localHost or example.com
if(split[1].includes("localhost")){//sub.localHost
domain=split[1];
subdomain=split[0];
}else{//example.com
domain=split.join(".");
}
}else{//sub2.sub.localHost or sub2.sub.example.com or sub.example.com or example.com.ec sub.example.com.ec or ... etc
const last=split[split.length-1];
const lastLast=split[split.length-2];
if(last.includes("localhost")){//sub2.sub.localHost
domain=last;
subdomain=split.slice(0,split.length-1).join(".");
}else if(last.length==2 && lastLast.length<=3){//example.com.ec or sub.example.com.ec
domain=split.slice(split.length-3,split.length).join(".");
if(split.length>3){//sub.example.com.ec
subdomain=split.slice(0,split.length-3).join(".");
}
}else{//sub2.sub.example.com
domain=split.slice(split.length-2,split.length).join(".");
subdomain=split.slice(0,split.length-2).join(".");
}
}
const newUrl = 'http://example.com/some/path/here/' + subDomain