簡體   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