需要PHP或Regex脚本来匹配URL

时间:2014-03-22 00:32:27

标签: php mysql regex

我正在将我网站上的所有网址更改为小写。我也用破折号替换所有下划线。所以URL / World / New_York将成为/ world / new-york。

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

所以我现在要做的就是确保接受所有相关链接,1)无论情况如何,2)无论单词是否被_, - 或简单空格分隔......

/世界/新约克 /世界/新,纽约 / WORLD /纽约 /世界/纽约

所有上述网址都应该被接受,因为1)它们都有相同的字符,2)单词用短划线,下划线或空格分隔。

在我的PHP代码中,URL由$ MyURL值表示。因此,如果您访问MySite / world / new-york,$ MyURL = new-york,其中new-york是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();

@ Shahar ......

下面是我的一个.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已经超越了我的脑海。 ;)

1 个答案:

答案 0 :(得分:1)

如果您想自动将网址转换为小写,请使用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)替换为-