如何在 .htaccess 503 重定向中保持网站网址相同

Posted

技术标签:

【中文标题】如何在 .htaccess 503 重定向中保持网站网址相同【英文标题】:How to keep website url the same in .htaccess 503 redirect 【发布时间】:2021-06-06 09:27:06 【问题描述】:

我有一个 .htaccess 文件,并且我已经建立了一个“即将推出”网站。它不包括我的 ip,因为我是开发人员,但对于其他访问者,我不希望它更改地址的 url。

这是文件:

Options +FollowSymlinks
RewriteEngine on
RewriteCond %REMOTE_ADDR !^12.345.67.89$
RewriteCond %REQUEST_URI !/html/pages/construction.html
RewriteCond %REQUEST_URI !\.(jpe?g?|png|gif|css|ico|mp4) [NC]
RewriteRule ^(.*)$ /HTML/pages/construction.html [R=302,L]

ErrorDocument 404 /HTML/error-pages/404.html

我该怎么做?非常感谢您的帮助

【问题讨论】:

【参考方案1】:

如果您不想更改 URL,则只需从您的 RewriteRule 中删除重定向标志。

执行以下操作:

改变

RewriteRule ^(.*)$ /HTML/pages/construction.html [R=302,L]

RewriteRule ^(.*)$ /HTML/pages/construction.html [L]

【讨论】:

虽然这不会提供 503(即“即将推出”)响应。这是“200 OK”。【参考方案2】:

除非您在服务器端脚本中手动设置 HTTP 响应状态,否则此处显示的代码中没有“503”响应。但如果这是一个.html 文件,那似乎不太可能。

要正确提供“503 服务不可用”响应,您应该定义适当的 ErrorDocument 并使用 R 标志调用它。

例如:

Options +FollowSymlinks

ErrorDocument 404 /HTML/error-pages/404.html
ErrorDocument 503 /HTML/pages/construction.html

RewriteEngine On

# 503 Service Unavailable except for the given IP address
RewriteCond %REMOTE_ADDR !^203\.0\.113\.111$
RewriteCond %ENV:REDIRECT_STATUS ^$
RewriteRule !\.(jpe?g?|png|gif|css|ico|mp4)$ - [NC,R=503,L]

尽管使用了R 标志,但这里没有外部重定向。 (重定向只发生在 3xx 范围内的状态码。)

检查REDIRECT_STATUS 环境变量的条件做了两件事:

    它确保 503 ErrorDocument 的内部子请求本身不会触发 503 - 这将导致无限循环并且响应中不会返回自定义 ErrorDocument。

    /HTML/pages/construction.html 文档(503 ErrorDocument)的直接请求本身将触发503 响应。

另外请注意,如果您要发送 503 响应,理想情况下,您还应该发送 Revisit-After HTTP 响应标头,以向(搜索引擎)机器人指示您的网站何时可用。

【讨论】:

以上是关于如何在 .htaccess 503 重定向中保持网站网址相同的主要内容,如果未能解决你的问题,请参考以下文章

在 .htaccess 重定向中保留 HTTP/HTTPS 协议

Apache .htaccess 重定向删除表单数据

错误 503 centeron 如何正确重定向

将.htaccess重定向与apache别名结合起来

如何从 .htaccess 中删除 301 重定向?

如何在不保留路径的情况下进行htaccess重定向?