繁体   English   中英

需要PHP或Regex脚本来匹配URL

[英]Need PHP or Regex script for matching URL's

我将网站上的所有URL更改为小写。 我还用破折号替换了所有下划线。 因此,URL / World / New_York将变为/ world / new-york。

但是,我不想失去仍然指向/ World / New_York的链接的流量,因此我希望该链接也能正常工作。 据我了解,我可以使用Apache文件自动将浏览器中的URL更改为正确的格式(小写)。

所以我现在要做的就是确保所有相关链接都被接受,1)不管大小写,2)不管单词是用_,-还是简单的空格分隔...

/ world /纽约/世界/纽约/ WORLD /纽约/ wORld / new_YORK

上面的所有URL均应接受,因为1)它们都具有相同的字符,并且2)单词之间用短划线,下划线或空格分隔。

在我的PHP代码中,URL由值$ MyURL表示。 因此,如果您访问MySite / world / new-york,则$ MyURL =纽约,其中纽约是MySQL数据库值。

因此,我认为我需要做的是创建一个脚本,该脚本说$ MyURL = 1)数据库值,或2)数据库值,并允许备用大小写值,和/或3)数据库值,并用破折号代替下划线或空格。 然后,我将在页面显示查询(如下)之前插入此脚本。

谁能告诉我如何使用PHP或正则表达式编写此类脚本?

$sql= "SELECT COUNT(URL) AS num FROM orgs
WHERE URL = :MyURL";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':MyURL',$MyURL,PDO::PARAM_STR);
$stmt->execute();
$Total = $stmt->fetch();

@沙哈尔...

以下是我的.htaccess文件之一的一些代码,我在其中插入了您的代码...

RewriteEngine On
RewriteRule ^test\.htm$ test.php [L]
Options -MultiViews

#Your suggested rule...
RewriteRule ^/(.*)$ /${lower:$1}

php_flag magic_quotes_gpc Off

RewriteRule ^topics/([a-zA-Z0-9()_/-]+)/?$ topics/index.php?topic=$1 [L]
RewriteRule ^world/([a-zA-Z0-9()_/-]+)/?$ world/index.php?area=$1 [L]

但是,当我输入px / Topics / Ethics时,出现了NOT FOUND错误。 当我将其更改为px / topics / Ethics或px / topics / ethics时,它可以工作。 但是,我希望伦理学能够转变为伦理学。

我的关注点之一是统计。 我不想查看我的每日统计数据,看到主题/道德的点击量为16,主题/道德的点击量为13,主题/道德的点击量为3。 相反,我希望看到32个关于主题/道德的命中。 但是,Apache使我头疼。 ;)

如果要自动将URL转换为小写,请使用mod_rewrite 这是您需要添加的内容:

RewriteMap lower int:tolower
RewriteRule  ^([^/]+)/?$  yourdir/${lower:$1}

您没有指定yourdir是什么...或只是这样做: RewriteRule ^/(.*)$ /${lower:$1}

使用PHP,您可以执行strtolower() 虽然,我不太清楚为什么。 我相信MySQL搜索是不区分大小写的。

编辑:另外,对于替换部分,我认为这应该起作用:

RewriteRule ^(.*)\_(.*)$ $1\-$2
RewriteRule ^(.*)\%20(.*)$ $1\-$2

第一个将取代_-第二个将替代空间( $20带) -

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM