有實際檔案時不rewrite

原本以為若網址為真實檔案的request,rewrite設定就不會啟用,但實際上不是這樣,而是會完完全全按照rewriteRule的規則來運作。

若要達成實際檔案存在時不執行rewrite設定,實際上就是要設定一組rewrite規則來運作。例如:

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ – [NC,L]

上述設定是指,當實際request的檔名是symbolic link(-l),或是檔案大小大於0的檔案(-s),或是目錄,並且實際存在時,則執行^.*$ – [NC,L] 這個規則,實際上就是完全不改寫,「-」代表使用原本的要求檔名。NC是指不分大小寫,L是指不再參考後續的rewriteRule。

另外,rewriteCond允許連續多行設定,但只影響緊接在該組rewriteCond後第一個rewriteRule設定。例如下列狀況,第一個RewriteRule會在符合上述所有的RewriteCond時執行,而第二個rewriteRule則和他們完全無關。

RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ – [NC,L]
#與上述rewriteCond和rewriteRule無關
RewriteRule ^.*$ index.php [L]

 

 

 

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *