我正在将我网站上的所有网址更改为小写。我也用破折号替换所有下划线。所以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已经超越了我的脑海。 ;)
答案 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
)替换为-
。