1

为了构建一个干净的规范 url,它总是返回 1 个基本 URL,我陷入了以下情况:

<?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>

当 URL :http://website.com/de/home.ext?ln=de
规范: http://website.com/de/home.ext

我也想删除文件扩展名,无论是 .php、.ext .inc 还是任何两个或三个字符扩展名.[xx]左右.[xxx],基本 url 变为:http://website.com/en/home

啊啊好多了!但是我如何在当前代码中实现这一点?任何提示都非常感谢+!

4

2 回答 2

2

认为应该这样做,如果有扩展名,只需去掉结尾,就像您对查询字符串所做的那样:

$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
于 2011-01-17T18:48:17.027 回答
1

试试这个:

preg_match("/(.*)\.([^\?]{2,3})(\?(.*)){0,1}$/msiU", $_SERVER['REQUEST_URI'], $res);
$canonical = "http://website.com" . $res[1];

和 $res[1] => 干净的网址;$res[2] = 扩展;$res[4] = "?" 之后的所有内容 (如果存在并且如果您需要)

于 2011-01-17T18:57:58.583 回答