如何检测当前URL是否完全匹配指定值并执行对应操作?
现有代码的问题分析
首先,你的现有代码完全不符合需求,问题主要有这几点:
- 硬编码URL值:代码里直接把
$url赋值为固定字符串,根本没有获取当前实际请求的URL,等于永远在判断一个预设值,完全起不到判断当前URL的作用。 - 判断逻辑错误:你用
strpos检查是否包含子串,但需求是当前URL完全等于指定值,不是包含。就算改成获取当前URL,strpos也会在URL包含&2222的任何情况(比如后面多其他参数)都触发,不符合完全匹配的要求。 - strpos的隐性坑:
strpos如果找到子串在开头会返回0,而0在if条件里会被当成false,就算是做包含判断,正确写法也应该是strpos(...) !== false,但这依然不满足你的需求。
正确的实现方案
根据你的需求,我们需要先获取当前完整的请求URL,再和目标URL做严格相等比较,或者根据参数灵活判断。
方案1:严格匹配完整URL
适合需求非常精准,必须完全符合目标URL的场景:
// 定义目标URL(注意:如果实际请求的URL中是&而非&,请把&替换成&) $targetUrl = 'https://www.example.co.il/index.php?id=1000&2222'; // 获取当前请求的完整URL $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http'; $currentUrl = $protocol . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; // 严格相等判断 if ($currentUrl === $targetUrl) { // 执行你需要的操作 echo "2222"; } else { // 不执行任何操作 }
注意事项:
- 确认
&是否正确:&是HTML转义后的字符,浏览器地址栏里的实际URL通常是&,如果你的目标URL实际是https://www.example.co.il/index.php?id=1000&2222,请修改$targetUrl的值。 - 这种方式是完全精确匹配,URL里任何字符不同(比如参数顺序变化、多一个斜杠)都会导致不匹配。
方案2:匹配URL的查询参数(更健壮)
如果只是需要判断URL包含id=1000和无键参数2222,不关心参数顺序或域名路径的细微变化,推荐用这种更灵活的方式:
// 解析当前URL的查询参数 parse_str($_SERVER['QUERY_STRING'], $queryParams); // 判断参数是否符合要求 if (isset($queryParams['id']) && $queryParams['id'] === '1000' && isset($queryParams['2222'])) { // 执行操作 echo "2222"; } else { // 不执行任何操作 }
这种方式的好处是,即使参数顺序变成2222&id=1000,依然能正确匹配,比完全匹配URL更健壮。
内容的提问来源于stack exchange,提问作者DigiNet Events
相关产品推荐
相关产品推荐

