Apache-2.2

命令 Apache 處理 .htaccess 指令

  • December 2, 2013

昨天我在一個 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

我省略了.htaccessHTML5 Boilerplate 中的內容(省略號),因為我認為程式碼不相關(我幾乎沒有碰過它,主要按原樣使用它,它在足夠多的網站上執行良好,我知道它不是有問題。作為參考,可以在這裡找到

由於該.htaccess文件頂部有預設的 WordPress 指令,底部有“改進的”指令,哪一個適用?

我搜尋了 Stackoverflow 和這裡,並在這一點上發現了幾個問題,但沒有一個真正回答指令處理順序的問題。將使用文件頂部還是底部的那個?

這是一個明確的具體範例,但我最終得到的.htaccess文件具有重複的程式碼和冗餘,以至於更一般的“經驗法則”答案對我來說比僅適用於此實例的答案更有用……例如,我經常以不同語法的 gzip ( compress/ mod_deflate) 指令結束,我不知道它們的順序是否重要。

如果有幫助,我認為這個站點是在 Apache 2.2 上的。

謝謝

由於RewriteRule . /index.php [L]將擷取除 之外的每個請求/,並且index.php無論如何都會執行,因此第二組規則(文件底部)將永遠不會適用。

實際上,這並不完全正確,但他們所做的只是嘗試跳過index.php對靜態文件的重寫(無論如何都不會發生)。

這可能是複制粘貼錯誤,或者是 Wordpress 的.htaccess文件自動管理(如此糟糕的功能)做了一些不應該的事情。刪除第二組規則,它不太準確,不太清楚,只是令人困惑的事情。

引用自:https://serverfault.com/questions/558594