// 检测域名
protected static function parseDomain(&$url, $domain)
{// 根据 url 及传入的 域名进行解析
if (!$domain) {// 如果没有传入合适的数据,直接 返回
return '';
}
$request = Request::instance();// 请求实例化
if (true === $domain) {// 如果传入的域名为 true 则自动判定域名
// 自动判断域名
$domain = $request->host();// 获取域名
if (Config::get('url_domain_deploy')) {// 是否根域名 依赖
// 根域名
$urlDomainRoot = Config::get('url_domain_root');// 通过 配置文件 获取 跟域名
$domains = Route::rules('domain');// 路由寻找 域名规则
$route_domain = array_keys($domains);// 获取 跟 域名 对应的 路由规则
foreach ($route_domain as $domain_prefix) {// 遍历循环 此前的 根域名
if (0 === strpos($domain_prefix, '*.') && strpos($domain, ltrim($domain_prefix, '*.')) !== false) {
// 能够进行 域名匹配
foreach ($domains as $key => $rule) {// 对路由规则进行遍历
$rule = is_array($rule) ? $rule[0] : $rule;// 如果 值 仍然是 数组,获取第一个元素 否则是 整个元素,
// 弄这么复杂的配置项 弄啥嘞
if (is_string($rule) && false === strpos($key, '*') && 0 === strpos($url, $rule)) {
$url = ltrim($url, $rule);// 当规则是个字符串,并且没有*号,并且是用rule 开头的
// 删掉 开头的 这个 规则匹配符号
$domain = $key;// 将相应的域名 赋值到 域名里面 修正自动获取的域名
// 生成对应子域名
if (!empty($urlDomainRoot)) {// 不为空,在去拼合 域名的 跟目录文件
$domain .= $urlDomainRoot;
}
break;//跳出
} else if (false !== strpos($key, '*')) {// 如果是*
if (!empty($urlDomainRoot)) {
$domain .= $urlDomainRoot;// 直接拼合 自动获取的域名 跟 跟目录
}
break;
}
}
}
}
}
} elseif (!strpos($domain, '.')) {// 以. 开头,或者没有 .
$rootDomain = Config::get('url_domain_root');// 获取根目录
if (empty($rootDomain)) {// 根域名 为空
$host = $request->host();// 请求 跟域名
$rootDomain = substr_count($host, '.') > 1 ? substr(strstr($host, '.'), 1) : $host;
}
$domain .= '.' . $rootDomain;
}
return ($request->isSsl() ? 'https://' : 'http://') . $domain;// 不同的协议
}// 总结:不同的方式进行了不同的 域名生成 规则的判定
// 解析URL后缀
protected static function parseSuffix($suffix)
{// 解析 URL 后缀
if ($suffix) {// 配置文件
$suffix = true === $suffix ? Config::get('url_html_suffix') : $suffix;// 如果传入的参数是 true
if ($pos = strpos($suffix, '|')) {//如果有分割线,获取第一组数据,那要分割线还有什么用途呢???
$suffix = substr($suffix, 0, $pos);
}
}// 后缀 是否有 . 无所谓,做了处理
return (empty($suffix) || 0 === strpos($suffix, '.')) ? $suffix : '.' . $suffix;
}
// 匹配路由地址
public static function getRuleUrl($rule, &$vars = [])
{
foreach ($rule as $item) {// 遍历路由规则
list($url, $pattern, $domain) = $item;// 每个item 都会拥有这么多的选项
if (empty($pattern)) {// 如果父级为空,直接返回
return [$url, $domain];
}
foreach ($pattern as $key => $val) {//对父级不为空的情况进行处理
if (isset($vars[$key])) {//如果对应的 配合变量
$url = str_replace(['[:' . $key . ']', '<' . $key . '?>', ':' . $key . '', '<' . $key . '>'], $vars[$key], $url);
unset($vars[$key]);
$result = [$url, $domain];// 返回 组合后的 url
} elseif (2 == $val) {
$url = str_replace(['/[:' . $key . ']', '[:' . $key . ']', '<' . $key . '?>'], '', $url);
$result = [$url, $domain];// 返回另外一种组合的url
} else {
break;
}
}
if (isset($result)) {// 如果有结果 返回结果
return $result;
}
}
return false;
}//匹配当前目录
// 指定当前生成URL地址的root
public static function root($root)
{
self::$root = $root;
Request::instance()->root($root);
}// 获取根地址
}
[李景山php]每天TP5-20170117|thinkphp5-Url.php-2
最新推荐文章于 2021-03-21 14:58:33 发布