要杀死的一只虫子。。。让PHP生成规范

要杀死的一只虫子。。。让PHP生成规范,php,html,url,uri,canonical-link,Php,Html,Url,Uri,Canonical Link,为了构建一个干净的规范url,该url始终返回1个基本url,im在以下情况下卡住: <?php # every page $extensions = $_SERVER['REQUEST_URI']; # path like: /en/home.ast?ln=ja $qsIndex = strpos($extensions, '?'); # removes the ?ln=de part $pageclean = $qsIndex !== FALSE ? substr($exten

为了构建一个干净的规范url,该url始终返回1个基本url,im在以下情况下卡住:

<?php
# every page
$extensions = $_SERVER['REQUEST_URI'];  # path like: /en/home.ast?ln=ja
$qsIndex = strpos($extensions, '?');    # removes the ?ln=de part
$pageclean = $qsIndex !== FALSE ? substr($extensions, 0, $qsIndex) : $extensions;
$canonical = "http://website.com" . $pageclean;   # basic canonical url
?>

<html><head><link rel="canonical" href="<?=$canonical?>"></head>


如果有扩展名的话,就去掉末尾,就像对查询字符串所做的那样:

$pageclean = $qsIndex !== FALSE ? substr($extensions, 0, $qsIndex) : $extensions;
$dotIndex = strrpos($pageclean, '.');
$pagecleanNoExt = $dotIndex !== FALSE ? substr($pageclean, 0, $dotIndex) : $pageclean; 
$canonical = "http://website.com" . $pagecleanNoExt;   # basic canonical url
试试这个:

preg_match("/(.*)\.([^\?]{2,3})(\?(.*)){0,1}$/msiU", $_SERVER['REQUEST_URI'], $res);
$canonical = "http://website.com" . $res[1];
和$res[1]=>干净的url; $res[2]=扩展;
$res[4]=在“?”之后的所有内容(如果存在并且需要)

web.com/en/home
是否真的解决了实际页面的问题?请注意,您所做的操作可能会导致web服务器出现问题,而这些服务器上的资源地址不是以传统方式组织的。@chelmertz指出的情况更是如此,扩展可能会重新被用于解析地址。你在做什么,我对它使用外部链接的信心会很低。@Chelmertz@user257493我不知道你的意思是什么,也不知道如何测试它是否工作,除了当我键入浏览器
website.com/ja/fruit
的URL,然后它重定向到
http://website.com/ja/fruit
带来了日文版的page fruit。这种方式有什么不对?很好奇。请用一个“
什么会出错”的例子,通过更清晰的论证,使你的陈述更加有力。
提前感谢你的关注,这同样是我的关注。@Sam,这不是一场辩论,甚至不是一场争论,这是一个简单的事实。不同的web服务器具有不同的资源地址配置。仅仅因为您使用的服务器是这样设置的,并不意味着它可以在任何地方工作。去弄清楚web服务器是如何工作的。@默认情况下,Sam address.com/bla通常解析为address.com/bla/index.ext,而不是address.com/bla.ext,因此我担心。如果你没有受到影响,我的问题的答案是肯定的:)谢谢杰瑞!我觉得这个实现给出的结果是空的,只剩下“”和$pageCleanOext是clean/empty!我得到了与尝试另一个答案时相同的empy url。似乎我做错了什么。。。如果我知道的话……少了一个美元符号
$
<代码>$DOTDINDEX似乎在工作。。。测试坦克助理,将尝试一下。对这件事的看法完全不同。我更喜欢php,但会检查这一点,并报告回来@山姆:没问题,如果它不适合你的需要或者你需要更多的帮助,就在这里问我<代码>预匹配(“/(.*)\([^\?]{2,3})(\?(.*){0,1}$/msiU“,$服务器['REQUEST\u URI'],$res)$规范=”http://website.com" . $res[1]$res[2]$res[3]$res[4]输出:
所以今天运气不好…你能在这里写下你正在对regexp进行测试的$\u SERVER['REQUEST\u URI']的值吗?非常感谢你的助手,不知怎的,preg\u匹配没有完美地工作,但可能与我的服务器有关。。无论如何,非常感谢你的帖子,因为这表明有很多路径可以把你带到罗马。