2014-09-03 47 views
1

我創建了一個新函數,希望實現麪包屑和更好的URL結構。從htaccess重寫規則排除多個路徑

此之前,我有以下規則:

RewriteRule ^pages/([a-z0-9,&-]+)/?$ ?action=viewArticleName&page_identifier=$1 [L,NC,QSA,B] 

這意味着,

www.example.com/pages/contact 

從數據庫中返回了一篇文章。現在我想改變這種做法,我的網址看起來像

www.example.com/categoryname/pagename 

所以我對這個工作重寫規則:

RewriteRule ^([^/]+)/([^/]+)$ /?action=viewCategoryName&categoryName=$1&page_identifier=$2 [L] 

問題是這樣的規則被造成任何圖像被包括來自/圖像加載包括該文章的模板。

我能想到的三種可能的解決方案,而不是實際的代碼:

1)我可以創建類別名稱的陣列?然後我可以以某種方式使RewriteRule只適用於這些名稱。

2)創建一個包含一些全局設置的類。在這有一些PHP,定義或設置圖像路徑。我能想到的就是;

define("IMAGE_PATH", "//example.com/images"); 

3)添加一些東西到Htacces文件中,從規則中排除某些路徑。

我知道MVC或類似的會取得更好的結果。這是關於我的學習,請告訴我,如果我在這裏挖了一個洞!

非常感謝, 亞當

回答

1

您可以從此改寫跳過所有現有文件和目錄像這樣以防止所有圖像越來越受這一新的規則:

# skip all existing files 
RewriteCond %{REQUEST_FILENAME} !-f 
# skip all existing directories 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([^/]+)/([^/]+)/?$ /?action=viewCategoryName&categoryName=$1&page_identifier=$2 [L,QSA,B] 

NB,增加了「 B'轉換爲標誌,這就避免了非字母數字字符,如'&'。

+1

這就是完美的工作!你介意解釋一下哪部分代碼會跳過所有現有的文件/目錄? – atoms 2014-09-03 07:33:11

+1

我在回答中添加了一些評論。基本上'%{REQUEST_FILENAME}!-f'表示它是否不是文件,'%{REQUEST_FILENAME}!-d'表示如果請求不是用於目錄。 – anubhava 2014-09-03 07:34:57

+1

完美的作品,感謝闡述將標記您的評論 – atoms 2014-09-03 07:35:46