首先从URL获取子域很容易.
http://www.domain.example
Run Code Online (Sandbox Code Playgroud)
扫描第一个时间段然后返回"http://"之后的任何内容......
然后你记得
http://super.duper.domain.example
Run Code Online (Sandbox Code Playgroud)
哦.所以,你想,好吧,找到最后一个时期,回过头来获取一切!
然后你记得
http://super.duper.domain.co.uk
Run Code Online (Sandbox Code Playgroud)
而你又回到了原点.除了存储所有顶级域名列表外,任何人都有任何好主意吗?
在laravel 5应用程序中,我试图在不知道域的情况下为子域创建路由.
Route::group(array('domain' => 'subdomain.domain.tld'), function() {
Route::get('/', 'testController@getTest2');
});
Route::get('/', 'testController@getTest1');
Run Code Online (Sandbox Code Playgroud)
这种路由工作,我得到了subTmain的getTest2()和没有子域调用的getTest1().
现在,我希望这可以使用通配符域,但不向控制器发送参数,因此dev环境中的应用程序可以在任何域上.(我也考虑使用.env存储域名,但这对于路由来说似乎太麻烦了)
我试过了
array('domain' => 'subdomain.{domain}.{tld}')
Run Code Online (Sandbox Code Playgroud)
这需要控制器方法的参数.我试过了
array('domain' => 'subdomain.{domain?}.{tld?}')
Run Code Online (Sandbox Code Playgroud)
这不需要参数,但无论如何都要发送它们,所以我的实际路由参数会被移动.
我也看过http://laravel-tricks.com/tricks/dynamic-subdomain-routing,但我不喜欢在过滤器中处理我的域名的想法.
有没有其他方法可以在处理路由组后忽略通配符域?
故事
我们以此请求https://nike.awesomedomainname.com/为例.我需要一个可以获取的服务nike.
我现在有什么
我有一个从服务器获取路由器密钥的服务@request_stack.让我们使用公司作为路由器密钥.
我的主要路线如下;
<import host="{company}.domain.{_tld}" prefix="/" schemes="https" resource="@ExampleBundle/Resources/config/routing.xml">
<default key="_tld">%app_tld%</default>
<requirement key="_tld">com|dev</requirement>
<requirement key="company">[a-z0-9]+</requirement>
</import>
Run Code Online (Sandbox Code Playgroud)
所以我写了这个服务来获取密钥并搜索公司;
...
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
class CompanyContextRequest {
protected $request;
protected $companyRepository;
public function __construct(RequestStack $requestStack, CompanyRepository $companyRepository) {
$this->request = $requestStack->getMasterRequest();
$this->companyRepository = $companyRepository;
}
public function getCompany()
{
if (null !== $this->request)
{
$company = $this->request->attributes->get('company');
if (null !== $company)
{
return $this->companyRepository->findOneBy([
'key' => $company
]);
}
}
}
....
}
Run Code Online (Sandbox Code Playgroud)
和服务xml定义;
<service …Run Code Online (Sandbox Code Playgroud) 我想知道如何创建一个PHP IF语句来检测用户是否正在加载某个URL.在我的情况下它是:
www.design.mywebsite.com
Run Code Online (Sandbox Code Playgroud)
IF语句需要覆盖整个子域,EG也必须检测到URL:
www.design.mywebsite.com/filename.php
Run Code Online (Sandbox Code Playgroud)
一旦建立了IF语句,我想添加一个PHP变量.所以它可能会帮助别人,让我们称之为:
$myvariable = "Hey there! You're on my subdomain";
Run Code Online (Sandbox Code Playgroud)
总结 一下:最终的代码应该是这样的......
<?php
if //Code to detect subdomain// {
$myvariable = "Hey there! You're on my subdomain";
}
?>
Run Code Online (Sandbox Code Playgroud) 我有一个dev.example.com带有通配符子域的静态域,如此*.dev.example.com.
我需要检测当前通配符子域的名称.所以,如果我正在浏览sub.dev.example.com如何获得"sub"?
$env_domain = dev.example.com;
$subdomain = array_shift( explode( '.', $_SERVER['HTTP_HOST'] ) ) .'.'. $env_domain;
echo $subdomain;
Run Code Online (Sandbox Code Playgroud)
目前,这将返回dev.我需要它回来sub.
我认为这里最好的做法是返回最低级别的域(第一个子域).
请注意,我没有解析URL,而是解析给定的域.
如果我有以下网址,我想获取任何网址的主机名
$url = "http://www.google.com";
Run Code Online (Sandbox Code Playgroud)
那么我想只得到google点后面.和扩展点之前的内容,.以便它可以应用于所有类型的网址.
所以结果应该是google!我认为这可能需要正则表达式或以某种方式任何想法如何做,谢谢.
我正在尝试找到一个PHP代码来创建子域并为我的用户自动安装子帐户的cms.这个子域名不会只是我正在制作的cms.