首先让我给你一些背景来解释我正在尝试做什么。我的网站使用的URL如下所示:MySite / World / Isthmus_of_Panama
我正在进行重大升级(最终可能会通过切换到像Drupal或WordPress这样的CMS进一步升级),听起来普遍的共识是带有连字符的URL比下划线更好。所以我将我的URL更改为MySite / World / Isthmus-of-Panama。与此同时,我也想弄清楚我是否应该将我的URL更改为全部小写,以及特殊符号如重音符号或圆括号?
如果有人输入的网址看起来像巴拿马的MySite / World / Isthmus? Wikipedia有一个脚本可以自动将空格转换为下划线。如果您使用了错误的案例,它也会默认使用正确的URL。
当然,如果我更改了我的网址,我还必须转发来自旧网址的访问者。它变得非常混乱。
然后我意识到我可以用一个接受任何匹配数据库中字符的URL来覆盖所有基础,1)无论情况如何,2)并且无论多个单词是否用连字符,下划线分隔,空格或%20。想象一下以下的URL:
MySite/World/Isthmus-of-Panama
MySite/World/Isthmus of Panama
MySite/World/Isthums%20of%20Panama
MySite/World/isthumus_of_panama
MySite/World/Isthmus-of_PANAMA
数据库值是Isthmus-of-Panama。
以下是我的一个查询,其中$ MyURL =数据库值URL(例如Isthmus-of-Panama)。任何人都可以告诉我如何修改它以便接受所有上述URL,然后页面默认为数据库值?
维基百科有类似的功能。如果你去看他们关于Crazy Horse的文章,然后用crazy_horse或Crazy Horse替换URL Crazy_Horse,它将默认为Crazy_Horse。感谢。
$sql= "SELECT COUNT(URL) AS num FROM gs_reference
WHERE URL = :MyURL";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':MyURL',$MyURL,PDO::PARAM_STR);
$stmt->execute();
$Total = $stmt->fetch();
switch($Total['num'])
{
case 1:
// DISPLAY A PAGE
break;
case 0:
// 404 NOT FOUND ERROR
break;
default:
// DUPLICATE RESULTS
break;
}
答案 0 :(得分:1)
我会将输入,例如Isthums%20of%20Panama转换为php中的数据库值。 如果转换后的值等于输入值,则不要使用转换后的文本进行301重定向到其他地方
修改
我会在数据库中创建一个列slug(通常称为this),其中包含文本规范化(ascii字符和 - )并在其上创建唯一索引 您可以使用此函数在php中生成slu :: PHP function to make slug (URL string)