3

我在 internetz 上找到了这段代码,它检查当前页面的 url;

function curPageURL() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}

所以现在我可以做这样的事情;

elseif (curPageURL() == "http://www.example.com/pageexample") {
<meta tags here>
}

伟大的。但我也想将它用于分页页面。这些 URL 如下所示:

http://www.example.com/pageexample?start=30&groep=0
http://www.example.com/pageexample?start=60&groep=0
http://www.example.com/pageexample?start=90&groep=0
[....]
http://www.example.com/pageexample?start=270&groep=0

我可以为这些链接中的每一个使用 if 语句.. 但我更愿意使用一个。是否可以添加通配符或其他内容?像这样我猜(注意*

elseif (curPageURL() == "http://www.example.com/pageexample" OR curPageURL() == "http://www.example.com/pageexample?start=*&groep=0") {

编辑: 我想对所有这些 URL 执行此操作,因为我想给它们相同的meta description,<title><link rel="canonical". 我可以通过为每个页面(10+ atm)执行一个 if 语句来手动执行此操作,但我认为有更好的方法。

4

6 回答 6

3

为什么不直接使用parse_url()函数?从手册页:

<?php

$url = 'http://username:password@hostname/path?arg=value#anchor';
print_r(parse_url($url));

?>

// The above would print
Array
(
    [scheme] => http
    [host] => hostname
    [user] => username
    [pass] => password
    [path] => /path
    [query] => arg=value
    [fragment] => anchor
)

对于您的特定情况,您可以只检查hostandpath变量。

于 2012-06-12T13:41:24.290 回答
2

听起来很像正则表达式问题:

if (preg_match("#^http://www.example.com/pageexample(\?start=[^&]*&groep=0)?#", curPageURL())) {
    // it matches
}

该表达式的[^&]*作用类似于您的*. ; to match non-empty items, use[^&]+`。它匹配这些:

http://www.example.com/pageexample
http://www.example.com/pageexample?start=30&groep=0

更新

不完全清楚为什么需要与完整的规范 URL 进行比较,除非您有多个域指向相同的代码库。

于 2012-06-12T13:44:13.430 回答
1

您应该使用字符串比较函数

if (strstr(curPageURL(), 'http://www.example.com/')) !== FALSE) {
  // curPageURL() contains http://www.example.com/
}

或者

if (preg_match('/^http\:\/\/www\.example\.com\//', curPageURL()) { 
  // curPageURL() starts with http://www.example.com/
}

有很多方法可以做到

于 2012-06-12T13:43:47.120 回答
1

你可以把这个包起来

elseif (curPageURL() == "http://www.example.com/pageexample" OR curPageURL() == "http://www.example.com/pageexample?start=*&groep=0") {

在一个 while 循环中,将 30 添加到每次迭代中都有通配符的变量中。

于 2012-06-12T13:43:52.090 回答
0

你试过正则表达式吗?

if (preg_match('/http:\/\/www\.example\.com\/pageexample\?start=[0-9]+&groep\=0/i', "http://www.example.com/pageexample?start=34&groep=0")) {
   echo "A match was found.";
else {
   echo "A match was not found.";
}
于 2012-06-12T13:44:20.663 回答
0

如果您不使用 $_SERVER 数组中的 query_string 元素,所有分页 URL 都将返回相同的 URL:http://www.example.com/pageexample,您可以使用

echo $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"] ;

对比

echo $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"].'?'.$_SERVER["QUERY_STRING"] ;

您会看到在第一种情况下您没有收到 GET 参数

于 2012-06-12T13:45:43.523 回答