htaccess multiple conditions for rewrite rule for wordpress website

问题描述 投票:0回答:2

我在

.htaccess
文件中有以下规则,用于将我的 Wordpress 博客重定向到维护页面。

#Redirecting to maintenance page
RewriteCond %{REQUEST_URI} !^blogs/maintenance\.html$
RewriteRule ^(.*)$ https://www.my-domain.com/blogs/maintenance.html [R=307, L]

这工作正常,所有页面都重定向到维护页面。现在我需要在条件中添加

wp-admin
,这样我就可以登录到管理员端。我尝试了以下方法:

RewriteCond %{REQUEST_URI} !^blogs/maintenance\.html$
RewriteCond %{REQUEST_URI} !^blogs/wp-admin/$
RewriteRule ^(.*)$ https://www.my-domain/blogs/maintenance.html [R=307, L]

但这不起作用,

wp-admin
被重定向到维护页面。

wordpress apache .htaccess
2个回答
0
投票

检查这个-

RewriteCond %{REQUEST_URI} !^blogs/maintenance\.html$ [OR]
RewriteCond %{REQUEST_URI} ^blogs/wp-admin/
RewriteRule ^(.*)$ https://www.my-domain.com/blogs/maintenance.html [R=307,L]

0
投票
RewriteCond %{REQUEST_URI} !^blogs/maintenance\.html$
RewriteCond %{REQUEST_URI} !^blogs/wp-admin/$
RewriteRule ^(.*)$ https://www.example.com/blogs/maintenance.html [R=307, L]

这里(以及您原来的规则)有几个错误:

  • REQUEST_URI
    服务器变量的值以斜杠开头,因此第一个(和第二个)condition 总是会成功。 (但这会导致重定向循环 - 除非您将规则放在
    .htaccess
    文件末尾的错误位置??)
  • 您在第二个condition(即
    !^blogs/wp-admin/$
    )中包含了一个字符串结尾锚点,因此它只会匹配那个确切的URL。您需要防止维护页面显示为
    /blogs/wp-admin/
    .
  • 开头的任何 URL
  • 你在 flags 参数中有一个 space,即。
    [R=307, L]
    。这在语法上是无效的,并且会因 500 错误而中断(我认为它不是,但如何?)

所以,它应该是这样的:

RewriteCond %{REQUEST_URI} !^/blogs/wp-admin(/|$)
RewriteRule !^blogs/maintenance\.html$ https://www.example.com/blogs/maintenance.html [R=307,L]

这应该放在

.htaccess
文件的顶部。

您还需要排除您的管理页面或维护页面正在使用的任何其他资产(和 AJAX 请求)。

我已经将第一个条件移动到

RewriteRule
pattern。请注意,
RewriteRule
pattern 匹配的 URL 路径确实 not 以斜杠开头。


旁白:

但是,您不应该重定向请求以提供“维护中”页面。直接提供“503 服务不可用”响应,理想情况下提供

Retry-After
HTTP 响应标头,以通知搜索引擎何时恢复抓取。例如:

ErrorDocument 503 /blogs/maintenance.html

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{REQUEST_URI} !^/blogs/wp-admin(/|$)
RewriteRule ^ - [R=503]

Header always set Retry-After "Mon, 15 Mar 2023 19:00:00 GMT"

这将 503 响应用作内部子请求,没有外部重定向(第二个请求)。

maintenance.html
文档不会暴露给最终用户,因为 URL 不会更改。通过检查
REDIRECT_STATUS
环境变量,我们还可以将 503 响应发送到
maintenance.html
文档本身的直接请求。

© www.soinside.com 2019 - 2024. All rights reserved.