如果当前页面网址等于X或X?

时间:2012-06-12 13:38:22

标签: php wildcard

我在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>
}

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

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") {

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

6 个答案:

答案 0 :(得分: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
)

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

答案 1 :(得分:2)

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

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

表达式[^&]*的行为类似于*; to match non-empty items, use [^&amp;] +`。它匹配这些:

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

<强>更新

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

答案 2 :(得分: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/
}

有很多方法可以做到这一点

答案 3 :(得分:1)

你可以包装这个

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

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

答案 4 :(得分: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.";
}

答案 5 :(得分:0)

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

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

VS

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

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