不知道是否有合理的方法來做到這一點,或者如果我錯過了某些東西。我建立了一個內容管理系統,它通過一個模板系統(基本上是一個處理單個PHP文件)傳遞所有內容。考慮到這一點,下面的規則將請求發送到lucy.php,其中url被驗證並且加載了適當的模板。Mod重寫規則以追加查詢字符串並繼續
RewriteRule ^$ lucy.php [L,QSA]
RewriteRule ^([^/\.]+)/?$ lucy.php?section1=$1 [L,QSA]
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ lucy.php?section1=$1§ion2=$2 [L,QSA]
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ lucy.php?section1=$1§ion2=$2§ion3=$3 [L,QSA]
因此,URL的每個部分都以段#變量的形式發送到腳本。我的問題是當我使用需要自己的URL系統的模板。在這種情況下......一個博客。通常情況下,我會做類似
RewriteRule ^blog/([0-9]{4})/([0-9]{2})/([0-9]{2})/([^/\.]+)/?$ site/blog.php?year=$1&month=$2&day=$3&blog_url=$4 [L,QSA]
將請求發送到一次性腳本。我現在的做法是,http://domain.com/blog仍然會通過上述lucy.php腳本加載和顯示博客模板。那麼,是否可以繼續允許將請求的/ blog部分路由到適當的重寫規則,但是還要將年,月,日和blog_url字段附加到查詢字符串?/blog的url不會一致,甚至可能不會被稱爲博客,所以我需要一些可以動態工作的東西。
我唯一的想法是重複lucy.php的每個實例重寫,以包含基於日期的結構的可選參數。像...
RewriteRule ^([^/\.]+)/([0-9]{4})/([0-9]{2})/([0-9]{2})/([^/\.]+)/?$ lucy.php?section1=$1&year=$2&month=$3&day=$4&item_url=$5 [L,QSA]
但我認爲可能有更有效的方式來做到這一點。該慣例的另一個問題是,我希望這可以用於其他場景,如類別,作者和其他非博客場景。我不想爲這些實例中的每一個重複重寫lucy.php塊。思考?
這絕對是一種選擇,但我只是希望作爲最後的手段實施。就像我不想用大量重複代碼填充.htaccess一樣,我也不想在PHP中做同樣的事情。 –
@KorySharp'我不需要...包含/需要或功能的大型重複代碼塊。使用php解析'$ _SERVER ['REQUEST_URI']'(或例子中的$ _GET ['url']')提供了更多的靈活性。你最好把代碼分解成更小的文件,然後根據請求的uri包含它們。 –
@JohnathanKuhn我不是從組織角度講的。我知道如何使用include來分組代碼。我試圖找出最有效的方法來做某些事情,而且我不想通過使用PHP自己的url解析來重新發明輪子。 –