我正在嘗試創建簡單的重寫引擎,以使我的url更美麗。目前我使用此:重寫引擎爲php應用程序
RewriteEngine on
RewriteRule ^([a-zA-Z0-9_]*)/?([a-zA-Z0-9_]*)?/?([a-zA-Z0-9\-_/]*)?/?$ index.php?controller=$1&action=$2&id=$3 [NC,L]
所以,當我進入這個網址:
www.domain.com/fooo/bar/foobar
我會從PHP格特:
Array
(
[controller] => fooo
[action] => bar
[id] => foobar
)
我要更新這個重寫規則,所以當網域的部分url以2-3chars開頭後,它會創建不同的數組,如下所示:
from www.domain.com/eng/fooo/bar/foobar
Array
(
[lang] => eng
[controller] => fooo
[action] => bar
[id] => foobar
)
我創造了新的規則:
RewriteEngine on
RewriteRule ^([a-z]{2,3})/?([a-zA-Z0-9_]*)?/?([a-zA-Z0-9_]*)?/?([a-zA-Z0-9\-_/]*)?/?$ index.php?lang=$1&controller=$2&action=$3&id=$4 [NC,L]
RewriteRule ^([a-zA-Z0-9_]*)/?([a-zA-Z0-9_]*)?/?([a-zA-Z0-9\-_/]*)?/?$ index.php?controller=$1&action=$2&id=$3 [NC,L]
但是當我進入www.mydomain.com/english/foo/bar/foobar
它給了我:
Array
(
[lang] => eng
[controller] => lish
[action] => foo
[id] => bar/foobar
)
,但我期待
Array
(
[controller] => english
[action] => foo
[id] => bar/foobar
)
因爲單詞「english」長於3chars。
有人可以幫我解決這個問題嗎?謝謝!
感謝您給我的想法,工作的解決方案只需要刪除第一個問號。順便說一句。控制器,動作和ID不需要設置。如果它們沒有設置,index.php中的Loader類將使用默認信息(控制器的主目錄,操作的索引)填充它們。但是,謝謝! :) –
@ M.Svrcek正如我所說,我認爲最好用單獨和兩部分URL的單獨顯式規則來處理它。在像這樣的正則表達式中有大量的可選位只會導致你在稍後出現更奇怪的邊緣情況,並且使規則的處理效率降低。 – IMSoP
感謝您的建議,我會嘗試重拍他們:) –