[WordPress建站经验]在.htaccess添加新指令规则会被覆盖刷新的原因及解决方案

734次阅读
没有评论

共计 2096 个字符,预计需要花费 6 分钟才能阅读完成。

htaccess文件是WordPress网站根目录下的一个隐藏文件,文件名 .htaccess ,在wordpress建站过程中作为Apache服务器中的一个配置文件,它负责相关目录下的网页配置。 通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、允许/阻止特定的用户或者目录的访问、配置默认文档等功能。

最近,我在统计模块发现未知域名解析到我的站点ip,于是就想通过配置301规则实现永久跳转,消除未知域名解析的影响,我将配置写进标签 # BEGIN WordPress# END WordPress 中间,方案可行。使用一段时间之后,偶然发现配置失效,检查htaccess文件,发现文件内容恢复到初始状态,新增配置规则被覆盖没有了。

原因

查询资料,# BEGIN WordPress# END WordPress 之间配置的规则存在被覆盖重写的场景,其一就是当我们点击了 仪表盘 - 设置 - 固定连接 ,注意只要点击了,就会出发复写机制,该标记段落内所有的配置规则就会恢复到默认状态,裴先生认为这或许是一个bug的存在。

[WordPress建站经验]在.htaccess添加新指令规则会被覆盖刷新的原因及解决方案

默认配置

# BEGIN WordPress
# 在“BEGIN WordPress”与“END WordPress”之间的指令(行)是
# 动态生成的,只应被WordPress过滤器修改。
# 任何对标记之间的指令的修改都会被覆盖。
<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]
# END WordPress

解决方案

将需要添加在.htaccess中的规则,写在# BEGIN WordPress# END WordPress之外,这样WordPress就不会覆盖您的设置了。

比如裴先生需要添加两处规则:

  • 将未知域名301重定向
# BEGIN WordPress
# 在“BEGIN WordPress”与“END WordPress”之间的指令(行)是
# 动态生成的,只应被WordPress过滤器修改。
# 任何对标记之间的指令的修改都会被覆盖。
<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]
# END WordPress

# 新增配置规则
<IfModule mod_rewrite.c>
# 开启重写引擎
RewriteEngine On
# 检查是否是 crushnear.com 或 www.crushnear.com
RewriteCond %{HTTP_HOST} ^crushnear\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.crushnear\.com$
# 如果是,则重定向到 https://blog.peiluming.com,并保留原始的请求路径和查询字符串
RewriteRule ^(.*)$ https://blog.peiluming.com/$1 [R=301,L]
</IfModule>
  • 将http请求301重定向到https
# BEGIN WordPress
# 在“BEGIN WordPress”与“END WordPress”之间的指令(行)是
# 动态生成的,只应被WordPress过滤器修改。
# 任何对标记之间的指令的修改都会被覆盖。
<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]
# END WordPress

# 新增配置规则
<IfModule mod_rewrite.c>
# 开启重写引擎
RewriteEngine On
# 检查是否是 HTTP 协议
RewriteCond %{HTTPS} off
# 如果是,则重定向到 HTTPS 协议,并保留原始的请求路径和查询字符串
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

正文完
 1
裴先生
版权声明:本站原创文章,由 裴先生 2024-02-21发表,共计2096字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
本站勉强运行: