[英]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.