2011-08-07 26 views
1

htaccess的重寫規則:過濾某些詞彙

RewriteRule ^post/([^/]+)/([^/]+)$ /post/index.php?$1=$2 [NC] 

它做什麼它應該做的:取一個URL像post/color/black,並把它轉換成post/index.php?color=black

問題是,這也會影響像樣式表(位於post/styles/style.css)和其他真正存在的文件。

所以問題是:如果我知道需要翻譯的確切的$_GET鍵,我怎麼能限制上面的RewriteRule只對這些特定的鍵做它的魔法,但保持其他所有的東西不變?

謝謝。

回答

4

您可以使用:

^post/([^/]+)/(black|white|...)$ 

^post/([^/]+)/((?!bad keywords)[^/]+)$ 
+0

第一個是 - 謝謝! – bobsoap

3

您可以:

  • 使用-f標誌中加入以下的RewriteRules從重寫過程中排除實際存在的資源:

    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    
  • 或商店外/post你的靜態資源 - 這將是最好的,因爲你可以100%確定地排除碰撞的可能性,並且可以節省Apache查看文件(儘管這隻與很多流量有關)。

+0

感謝這個佩卡的'-f'標誌是金色和偉大就知道了。我確實有一種情況,我使用的是真正存在的目錄作爲GET鍵,所以我現在要使用@The Mask的建議。 – bobsoap

+0

另外...存儲'/ post'之外的資源是一個好主意,但在這種情況下,它會使文件結構複雜化,因爲我有不同的/獨立的應用程序在較低的級別運行......儘管我通常會同意。 – bobsoap