2012-09-18 25 views
1

可能的改進所以,我剛剛設法爲我剛剛開發的一個自定義網站編寫了一些RewriteCondRewriteRule,因爲我是所有這些的初學者,所以我跳了一下,有人會檢查我的代碼,告訴我是否有什麼需要改進的地方,或者它是否好。RewriteRules

我試圖做到的,是從/?mod=x轉換爲/x/?mod=x&type=y-z/x/y-z

這裏就是我現在做:

# Removes trailing slashes (prevents SEO duplicate content issues) 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)/$ $1 [L,R=301] 

RewriteCond %{REQUEST_URI} /([a-z]+)/([a-z\-]+)$ [NC] 
RewriteRule ^([^/]*)/([^/]*)$ /?mod=$1&tipo=$2 [NC,L] 

RewriteCond %{REQUEST_URI} /([a-z]+)/?$ [NC] 
RewriteRule ^([^/]*)$ /?mod=$1 [NC,L] 

所以,一切就OK了?或者,還有改進的餘地嗎?

+0

這對我來說很好。你有沒有考慮過後面的斜線?例如'/ x/yz /'和'/ x /' – waraker

+0

@ImCR,我已經這樣做了......只是沒有在代碼中提及它,請檢查更新(: – Alex

回答

1

您可以結合這些行,並移除RewriteCond

RewriteCond %{REQUEST_URI} /([a-z]+)/([a-z\-]+)$ [NC] 
RewriteRule ^([^/]*)/([^/]*)$ /?mod=$1&tipo=$2 [NC,L] 

RewriteCond %{REQUEST_URI} /([a-z]+)/?$ [NC] 
RewriteRule ^([^/]*)$ /?mod=$1 [NC,L] 

要:

RewriteRule ^([a-z]+)/([a-z\-]+)$ /?mod=$1&tipo=$2 [NC,L] 

RewriteRule ^([a-z]+)$ /?mod=$1 [NC,L] 

否則,這看起來不錯。


我想補充最後一個改進(關於htaccess的),這是我想它重定向/?MOD = INICIO到/ INICIO。所以我試圖用下面的代碼來實現,但是它一直在構建這樣的url/inicio?mod = inicio

這條規則直接與你的其他規則衝突。他們會互相重寫,因爲一個規則的目標是另一個規則的正則匹配。此外,您需要在目標末尾使用?以刪除實際的查詢字符串。您需要根據實際要求進行匹配:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /\?mod=([a-z]+) 
RewriteRule^/%1? [L] 
+0

謝謝,那確實非常有用更少的代碼=更好),但請檢查我的問題的更新,希望你能幫助 – Alex

+0

@ w0rldart沒有真正涉及到原來的問題,但我編輯了答案 –

+0

我創建了一個新的問題,在這裏有一個額外的細節:http:/ /stackoverflow.com/questions/12485120/redirecting-query-string-to-friendly-url抱歉,我的錯誤 – Alex