假設我有這 5 個 url(帶引數),并且想為它們中的每一個創建 url 重寫。這些 URL 是搜索表單的可能結果。(按表格搜索是通過 3 個可選的過濾器完成的:專業、地區、城市)
search.php?speciality=cardiologist®ion=my_region&city=my_city
doctor/cardiologist/my_region/my_city
search.php?speciality=cardiologist®ion=my_region
doctor/cardiologist/my_region
search.php?speciality=cardiologist
doctor/cardiologist
search.php?region=my_region&city=my_city
doctor/my_region/my_city
search.php?region=my_region
doctor/my_region
我將如何使用 htaccess/regex 重寫規則來管理這些 url 并避免混淆
我試過這個,但我認為它會造成混亂,所以它不能很好地作業(我是正則運算式的初學者)
RewriteRule ^doctor/([a-zA-Z\-] ) search.php?speciality=$1 [L]
RewriteRule ^doctor/([a-zA-Z\-] ) search.php?region=$1 [L]
RewriteRule ^doctor/([a-zA-Z\-] )/([a-zA-Z\-] ) search.php?speciality=$1®ion=$2 [L]
RewriteRule ^doctor/([a-zA-Z\-] )/([a-zA-Z\-] ) search.php?region=$1&city=$2 [L]
RewriteRule ^doctor/([a-zA-Z\-] )/([a-zA-Z\-] )/([a-zA-Z\-] ) search.php?speciality=$1®ion=$2&city=$3 [L]
你推薦什么解決方案?
uj5u.com熱心網友回復:
search.php?speciality=cardiologist®ion=my_region&city=my_city doctor/cardiologist/my_region/my_city
您無法在.htaccess/mod_rewrite if 中解決這種歧義speciality,region并且city都是獨立可選且完全可變的。
查詢字串通過包含引數名稱來解決這種歧義。如果您洗掉標識“名稱”(正如您在 URL 路徑中所做的那樣),則完全不明確。
僅從人類可讀的角度來看,您如何知道以下 URL 代表什么?
doctor/foo/bardoctor/baz/qux
如果speciality,region和 的所有值city在您的應用程式中都是唯一的,那么您可以通過查找資料庫中的值來確定哪個值是speciality,region或來解決 PHP 腳本中的這種歧義city。但這會給您的應用程式帶來很大的開銷,因為您必須執行幾個額外的資料庫查找。如果它們不是唯一的(現在或將來),那么這個問題就不可能解決。
你需要的東西在URL路徑標識每個值:speciality,region或city。例如:
doctor/s-cardiologist/r-my_region/c-my_citydoctor/r-my_region/c-my_citydoctor/s/my_speciality/r/my_region/c/my_citydoctor/r/my_region/c/my_city
或者在值不可用時使用占位符:
doctor/my-speciality/my-region/my-citydoctor/none/my-region/my-citydoctor/none/none/my-city
盡管這些解決方案是否比原始查詢字串更好?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/373578.html
標籤:正则表达式 阿帕奇 .htaccess 改写 url重写
上一篇:有沒有辦法通過FacebookMarketingAPI禁用預算優化?
下一篇:帶有長標題的PHP腳本
