Apache-2.2
命令 Apache 處理 .htaccess 指令
昨天我在一個 WordPress 網站上工作,主要是在 Web 性能優化能力(在共享主機上)。
有一次我注意到我的
.htaccess
文件有多餘的,可能是矛盾的指令:# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress # From the HTML5 Boilerplate # https://github.com/h5bp/html5-boilerplate/blob/master/.htaccess # Apache Server Configs v2.0.0 | MIT License # https://github.com/h5bp/server-configs-apache ... # BEGIN WordPress RewriteEngine on # # Unless you have set a different RewriteBase preceding this # point, you may delete or comment-out the following # RewriteBase directive: RewriteBase / # # if request is for image, css, or js file RewriteRule \.(gif|jpe?g|css|js|ico)$ - [L,NC] # or if URL resolves to existing file RewriteCond %{REQUEST_FILENAME} -f [OR] # or if URL resolves to existing directory RewriteCond %{REQUEST_FILENAME} -d # then skip the rewrite to WP RewriteRule ^ - [S=1] # else rewrite the request to WP RewriteRule . /index.php [L] # # END wordpress
我省略了
.htaccess
HTML5 Boilerplate 中的內容(省略號),因為我認為程式碼不相關(我幾乎沒有碰過它,主要按原樣使用它,它在足夠多的網站上執行良好,我知道它不是有問題。作為參考,可以在這裡找到。由於該
.htaccess
文件頂部有預設的 WordPress 指令,底部有“改進的”指令,哪一個適用?我搜尋了 Stackoverflow 和這裡,並在這一點上發現了幾個問題,但沒有一個真正回答指令處理順序的問題。將使用文件頂部還是底部的那個?
這是一個明確的具體範例,但我最終得到的
.htaccess
文件具有重複的程式碼和冗餘,以至於更一般的“經驗法則”答案對我來說比僅適用於此實例的答案更有用……例如,我經常以不同語法的 gzip (compress
/mod_deflate
) 指令結束,我不知道它們的順序是否重要。如果有幫助,我認為這個站點是在 Apache 2.2 上的。
謝謝
由於
RewriteRule . /index.php [L]
將擷取除 之外的每個請求/
,並且index.php
無論如何都會執行,因此第二組規則(文件底部)將永遠不會適用。實際上,這並不完全正確,但他們所做的只是嘗試跳過
index.php
對靜態文件的重寫(無論如何都不會發生)。這可能是複制粘貼錯誤,或者是 Wordpress 的
.htaccess
文件自動管理(如此糟糕的功能)做了一些不應該的事情。刪除第二組規則,它不太準確,不太清楚,只是令人困惑的事情。