2011-03-25 67 views
1

這是我的.htaccess這感覺就像它的方式,以及它可以變得更高效。我目前遇到的問題是,由於這些規則是在重寫配置文件視圖和vcard視圖的順序目前不起作用。我發現取決於按照什麼順序放置這些RewriteRules會影響其他人的行爲。如果你問我,它有點噩夢。我可以使我的htaccess更清潔,更多optomized?

我的網站結構並不複雜。我有3個PHP頁面,每個頁面使用$ _GET值處理項目的不同操作,以檢查人員是否在正確的位置並使用正確的參數。我遇到的一件事是建立友好的鏈接,以便人們可以使用熟悉的url路徑轉到圖片或其他東西。

那好吧,哦,哦。另外,當我想使用選項或設置時,我有一個動態的RewriteRule模板,然後我可以使用最後2個佔位符來放入我的數據。

# Options: 
# -MultiViews: Turns off multiviews so it doesn't interfer with our rewrite rules 
# -Indexes: Stop directory listings 
# +FollowSymlinks: Let out rewrite rules work 
Options -MultiViews -Indexes +FollowSymlinks 
RewriteEngine On 
RewriteBase/

# Error page 
# Force add trainling slash 
RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ 
RewriteRule (.*)$ http://foo.bar/$1/ [R=301,L] 

# Prepent www if not exist in URI 
RewriteCond %{HTTP_HOST} ^foo\.bar$ 
RewriteRule (.*) http://www.foo.bar/$1 [R=301,L] 

# If path is not a directory or file then apply RewriteRule 
RewriteCond %{REQUEST_FILENAME} -f [NC,OR] 
RewriteCond %{REQUEST_FILENAME} -d [NC,OR] 
RewriteCond %{REQUEST_FILENAME} -l [NC] 
RewriteRule .* - [L] 

# Rewrite for page view 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ account.php?type=$1&user=$2&page=$3 [QSA,L] 

# Condition to ignore regular links 
RewriteRule ^library/templates/([^/]+)/([^/]+)/([^/]+)/?$ library/templates/$1/$2/$3 [QSA,L] 

# Rewrite for dynamic page settings 
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/?$ account.php?type=$1&user=$2&page=$3&$4=$5 [QSA,L] 

# Rewrite for account view 
RewriteRule ^([^/]+)/([^/]+)/?$ account.php?type=$1&user=$2 [QSA,L] 

# Rewrite for site default resources location 
RewriteRule ^([^/]+)/([^/]+)/theme/s/([^/]+)/([^/]+)/([^/]+)/?$ library/themes/site/$3/$4/$5 [QSA,L] 

# Rewrite for profile view 
RewriteRule ^([^/]+)/?$ profile.php?user=$1 [NC,L] 

# Rewrite for vCard view 
RewriteRule ^([^/]+)/vcard/?$ vcard.php?user=$1 [NC,L] 


# Rewrite for user themes location 
#RewriteRule ^([^/]+)/([^/]+)/theme/([^/]+)?$ library/themes/users/$3 [NC,L] 

#error codes 
#RewriteRule ^error/([^/]+)/?$ error.php?code=$1 [NC,L] 

回答

2

既然你已經爲每個結果的網址只有一個規則,我不認爲你可以簡化這個 - 還是不顯著 - 不改變應用的URL結構。您的正則表達式很簡單,據我所知,足夠穩固。

但是,該結構是脆弱和順序相關的:

  • 兩部分的URL可以是指佔 視圖或到vCard視圖。這要求 將賬戶視圖規則放在 之後,vCard視圖規則並避免有一個名爲「vcard」的用戶 。
  • 五部分URL可以是常規的 鏈接或動態頁面設置 - 因此 避免交換這兩個規則或具有類型「庫」和 用戶「模板」。

我不會太在意效率/性能:在我的一個項目中,我們使用的是308 RewriteRule和307 RewriteCond(剛剛數過它們)的類似設置。擔心你有同樣的擔心,我曾經用隨機URL與轉換後的URL進行負載測試來衡量其性能,並且性能差異非常小,以至於在數據庫處理的背景下根本無法衡量。


注:事實上,我有類似的東西(驚人地相似,我不得不說)經驗不應該被解釋爲意味着我支持它。無法記錄和簡單解釋的URL結構是一場噩夢,應儘可能避免。

+0

thx,我是通過自己學習完成的,因此我沒有真正瞭解專業草擬的htaccess的樣子。你實際上用你提出的兩點來對待我。我會研究它,看看我可以解決我的訂單問題。謝謝 – Eli 2011-03-25 01:40:31

相關問題