我知道那里有很多類似的東西,但我沒有找到適合我的解決方案。
我有傳入的 URL,例如:https ://example.com/123-frank-street
并希望他們重寫為:https ://example.com/street/index.php?name=123-frank-street
我嘗試了幾十個版本,我最接近的是以下
RewriteRule ^[0-9] ([A-Za-z0-9-] )/?$ /street/index_test.php?street=$1 [NC,L]
這只重寫為:https ://example.com/street/index.php?name=-frank-street
123 丟失并且以某種方式未轉發。只有剩下的!我在這里錯過了什么或做錯了什么?
提前謝謝
uj5u.com熱心網友回復:
一旦你了解了它們的結構,重寫規則真的很簡單:
- 左邊是一個正則運算式,它確定規則應該匹配來自瀏覽器的哪些 URL
- 在該正則運算式中,您可以使用括號“捕獲”部分 URL
() - 接下來,是您要提供的 URL;它可以包括您捕獲的部分,使用編號的占位符
$1,$2等。這完全取決于您將這些放在哪里,Apache 不會猜測 - 最后,還有一些作為選項的標志;在您的示例中,您將“NC”用于“不區分大小寫”,將“L”用于“最后一條規則,如果匹配則停在此處”
在您的示例中,您要匹配的模式是^[0-9] [A-Za-z0-9-] /?$,即“從 URL 的開頭,1 個或多個數字,一個或多個字母/數字/連字符,0 或 1 個斜杠,URL 的結尾”。
您要捕獲的唯一部分是([A-Za-z0-9-] )“一個或多個字母/數字/連字符”部分;所以正在投入$1. 所以 URL 的其余部分被“丟棄”只是因為你沒有告訴 Apache 你想把它放在任何地方。
如果你想捕捉其他部分,只需移動括號,或添加更多。例如,如果你寫^([0-9] )([A-Za-z0-9-] )/?$then$1將包含“一個或多個數字”部分,$2并將包含“一個或多個字母/數字/連字符”部分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/434253.html
