WordPress网站.htaccess配置疑问:规则位置与标签使用
.htaccess重定向规则相关问题解答
1. 为何重定向命令放在WordPress基础规则后无法正常运行?
Apache的Rewrite规则是从上到下按顺序执行的,而WordPress核心规则里包含带[L]标志的规则:
RewriteRule ^index\.php$ - [L] RewriteRule . /index.php [L]
[L]标志的作用是终止当前一轮的规则处理,一旦匹配到这些规则,后续的所有Rewrite规则(包括你的重定向规则)都会被跳过,根本没机会执行。
另外,当请求先经过WordPress规则时,非文件/目录的请求会被直接转发到index.php,此时就算你的重定向条件(比如www域名或HTTP协议)满足,也不会触发重定向——因为规则执行已经被[L]终止了。
2. 将WordPress基础规则放在第三位是否存在问题?
当前的顺序(重定向→WordPress核心→缓存/处理器规则)是完全合理且推荐的:
- 重定向是前置的标准化操作,必须先把所有请求统一到
非www + HTTPS的规范地址,避免出现重复内容(SEO大忌),同时确保后续的WordPress、缓存规则都是基于正确的地址生效。 - 重定向完成后,浏览器会发起新的请求,此时WordPress规则就能正常处理规范地址的请求,不会影响网站的正常运行。
只要重定向规则保持在最前面,WordPress规则放在第三位没有任何问题。
3. 重复使用是否有必要?
完全没必要重复添加。<IfModule rewrite_module>的作用是判断mod_rewrite模块是否启用,只要在所有Rewrite规则的最外层添加一次就足够覆盖所有后续的Rewrite规则。重复添加不仅冗余,反而会增加代码复杂度,违背“保持整洁”的初衷。
你可以把前两个重定向块合并到同一个<IfModule rewrite_module>标签内,并且整个.htaccess里只需要写一次RewriteEngine On(因为启用一次就全局生效),优化后的重定向部分可以改成这样:
# BEGIN redirects (www to non-www + HTTP to HTTPS) <IfModule rewrite_module> RewriteEngine On # 重定向www到非www RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L] # 重定向HTTP到HTTPS RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] </IfModule> # END redirects
你的原始.htaccess代码
# BEGIN redirect www to non www <IfModule rewrite_module> RewriteEngine On RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ https://%1/$1 [R=301,L] </IfModule> # END redirect www to non www # BEGIN redirect to https <IfModule rewrite_module> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] </IfModule> # END redirect to https # BEGIN WordPress # directives (lines) between "BEGIN WordPress" and "END WordPress" # They are dynamically generated, and should only be edited by WordPress filters. # Any changes to instructions between these pointers will be rewritten. <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 # 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 ASYNC start ### RewriteCond %{REQUEST_URI} /wp-admin/admin-ajax\.php RewriteCond %{QUERY_STRING} action=async_litespeed RewriteRule .* - [E=noabort:1] ### marker ASYNC end ### ### marker MOBILE start ### RewriteCond %{HTTP_USER_AGENT} Mobile|Android|Silk/|Kindle|BlackBerry|Opera\ Mini|Opera\ Mobi [NC] RewriteRule .* - [E=Cache-Control:vary=%{ENV:LSCACHE_VARY_VALUE}+ismobile] ### marker MOBILE end ### ### 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! ## ### marker BROWSER CACHE start ### <IfModule mod_expires.c> ExpiresActive on ExpiresByType application/pdf A31557600 ExpiresByType image/x-icon A31557600 ExpiresByType image/vnd.microsoft.icon A31557600 ExpiresByType image/svg+xml A31557600 ExpiresByType image/jpg A31557600 ExpiresByType image/jpeg A31557600 ExpiresByType image/png A31557600 ExpiresByType image/gif A31557600 ExpiresByType image/webp A31557600 ExpiresByType video/ogg A31557600 ExpiresByType audio/ogg A31557600 ExpiresByType video/mp4 A31557600 ExpiresByType video/webm A31557600 ExpiresByType text/css A31557600 ExpiresByType text/javascript A31557600 ExpiresByType application/javascript A31557600 ExpiresByType application/x-javascript A31557600 ExpiresByType application/x-font-ttf A31557600 ExpiresByType application/x-font-woff A31557600 ExpiresByType application/font-woff A31557600 ExpiresByType application/font-woff2 A31557600 ExpiresByType application/vnd.ms-fontobject A31557600 ExpiresByType font/ttf A31557600 ExpiresByType font/otf A31557600 ExpiresByType font/woff A31557600 ExpiresByType font/woff2 A31557600 </IfModule> ### marker BROWSER CACHE end ### ## LITESPEED WP CACHE PLUGIN - Do not edit the contents of this block! ## # END NON_LSCACHE # php -- BEGIN cPanel-generated handler, do not edit # Set the “ea-php73” package as the default “PHP” programming language. <IfModule mime_module> AddHandler application/x-httpd-ea-php73 .php .php7 .phtml </IfModule> # php -- END cPanel-generated handler, do not edit
内容的提问来源于stack exchange,提问作者Paul Vek
相关产品推荐
相关产品推荐

