首頁  >  問答  >  主體

為什麼我的 .htaccess 和重寫規則可能與建議的配置不同?

我繼承了一個現有的(而且有很多問題)wordpress.org 網站,我很難理解前任所有者決定對 .htaccess 檔案所做的選擇/規則。

我一直在嘗試用谷歌搜尋它的不同部分並查看不同的文檔,但有些部分我找不到答案

我使用了 htaccess 測試器,滿足了一些規則,但很多規則不滿足 測試人員無法檢查「ifmodule」語句,也無法理解 CacheLookup on

# BEGIN LSCACHE
## LITESPEED WP CACHE PLUGIN - Do not edit the contents of this block! ##
<IfModule LiteSpeed>
RewriteEngine on
CacheLookup on
RewriteRule .* - [E=Cache-Control:no-autoflush]
RewriteRule \.litespeed_conf\.dat - [F,L]

### marker CACHE RESOURCE start ###
RewriteRule wp-content/.*/[^/]*(responsive|css|js|dynamic|loader|fonts)\.php - [E=cache-control:max-age=3600]
### marker CACHE RESOURCE end ###

### marker FAVICON start ###
RewriteRule favicon\.ico$ - [E=cache-control:max-age=86400]
### marker FAVICON end ###

### marker WEBP start ###
RewriteCond %{HTTP_ACCEPT} "image/webp"
RewriteRule .* - [E=Cache-Control:vary=%{ENV:LSCACHE_VARY_VALUE}+webp]
RewriteCond %{HTTP_USER_AGENT} iPhone.*Version/(\d{2}).*Safari
RewriteCond %1 >13
RewriteRule .* - [E=Cache-Control:vary=%{ENV:LSCACHE_VARY_VALUE}+webp]
### marker WEBP end ###

### marker DROPQS start ###
CacheKeyModify -qs:fbclid
CacheKeyModify -qs:gclid
CacheKeyModify -qs:utm*
CacheKeyModify -qs:_ga
### marker DROPQS end ###

</IfModule>
## LITESPEED WP CACHE PLUGIN - Do not edit the contents of this block! ##
# END LSCACHE
# BEGIN NON_LSCACHE
## LITESPEED WP CACHE PLUGIN - Do not edit the contents of this block! ##
## LITESPEED WP CACHE PLUGIN - Do not edit the contents of this block! ##
# END NON_LSCACHE


#Begin Really Simple Security
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/ [R=301,L]
</IfModule>

#End Really Simple Security
# BEGIN WordPress
# The directives (lines) between "BEGIN WordPress" and "END WordPress" are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

首先,測試人員說

RewriteEngine on

Only the last RewriteEngine line is taken into account

如果是這樣,為什麼要為每個標記部分添加它?我可以省略這個嗎?

此外,許多 litespeed 規則都沒有得到滿足,但我也認識到有一些部分它無法理解/看到

似乎缺少 litespeed .htaccess 上設定的「範例規則」部分和重寫規則

為什麼他們可能會更改「建議」範例規則的某些部分?例如我的文件說

RewriteCond %{HTTP_ACCEPT} "image/webp"

(測試人員無法檢查,因為該變數對其未知) 但範例重寫規則包括[或]

RewriteCond %{HTTP_ACCEPT} "image/webp" [or]

另外,我不確定他們為什麼決定包含 if 語句來檢查哪個模組? (這些有什麼優點,或是這些「ifmodule」標籤可以刪除嗎?)

最後,這可能是一個愚蠢的問題 - “真正簡單的 SSL”與/以前稱為“真正簡單的安全”相同嗎? 如果是,我應該將 .htaccess 更新為非常簡單的 SSL .htaccess 指南嗎?

我希望這個帖子也可以幫助其他嘗試配置其網站的人。

P粉505450505P粉505450505251 天前368

全部回覆(1)我來回復

  • P粉032900484

    P粉0329004842024-01-17 13:07:16

    在我看來,他們決定安裝許多不同的 WordPress 插件,每個插件都將自己的部分添加到 .htaccess 中。看起來沒有人按照任何計劃建立此配置。

    RewriteEngine On 被包含多次,因為每個外掛程式都希望確保它已設定。擁有多個這樣的語句除了佔用空間和處理時間之外不會造成任何損害。

    IfModule 指令由外掛程式添加,以便在未啟用所需的 Apache 模組時網站不會立即收到「500 內部伺服器錯誤」。如果沒有模組,規則就沒有任何效果,因此在您知道啟用了哪些 Apache 模組的電腦上實作您自己的規則時,新增對模組的檢查幾乎沒有意義。

    我的猜測是,這些規則是由舊版的外掛程式添加的,而不是手動編輯的。可能有人嘗試自訂該文件,但情況不一定如此。

    我警告不要在 BEGINEND 註解之間進行大量編輯。插件將這些標記放在那裡,以便它們可以在升級過程中替換自己的規則。您所做的任何更改都可能在某個時刻被覆蓋。

    我建議查看該網站實際需要哪些 WordPress 外掛。看起來可能安裝了多個快取插件,並且它們可能相互衝突。我首先會削減提供您所需功能的最少插件集。

    您應該升級所有外掛程式以修補可能的安全漏洞,並確保每個外掛程式的重寫規則也更新為最新。

    回覆
    0
  • 取消回覆