使用 .htaccess 重定向到维护文件

使用 .htaccess 重定向到维护文件

我正在尝试做一个简单的重定向到维护页面,但是似乎 Apache 不允许我这样做!

我有一个包含 3 个 wiki 版本的文件夹(每个版本都有一种特定的语言),所以我想将每个 wiki 流量重定向到他自己的维护页面。

这是我的.htaccess

 #Redirect trafic to maintenance page
 RewriteEngine On
 RewriteCond %{REQUEST_URI} !maintenance.htm$ [NC]
 RewriteRule "(.*\/wiki.*\/).*" "$1/maintenance.htm" [R=302,L]

目标是将“myserver/wiki/ANYTHING”重定向到“myserver/wiki/maintenance.htm”

如果有人能告诉我我做错了什么,那就太好了

谢谢

编辑:

经过更多的测试,似乎我正在寻找类似的东西

RewriteRule "(.*)" "??PROTOCOL??://%{HTTP_HOST}/??SITEFOLD??/maintenance.htm" [R=302,L]

答案1

这似乎有效:

#Redirect trafic to maintenance page
RewriteEngine On
RewriteCond %{REQUEST_URI} !maintenance.htm$ [NC]
RewriteRule "(.*\/wiki)\/.*" "$1/maintenance.htm" [R=302,L]

您的版本允许 / 与 .* 匹配(因为 Apache 是贪婪的正则表达式),并且括号中包含 / 意味着重复。因此,在您的示例中:

myserver/wiki/test1/test2

将重定向到此(使用 test1 和双 /):

myserver/wiki/test1//maintenance.htm

而在我的示例中,这将重定向到:

myserver/wiki/maintenance.htm

我想这就是你想要的。

然而,尽管上述解决方案应该可行,但有时为了您自己的理智,最好简化一下,只保留三个。虽然这有点重复,而且不可扩展,但如果您仅限于三个,那么有时清晰比聪明更重要。例如,如果您在 /en/wiki、/es/wiki 和 /de/wiki 分别有一个英语 wiki、一个西班牙语 wiki 和一个德语 wiki,那么以下方法可能更简单。

#Redirect trafic to maintenance page
RewriteEngine On
RewriteCond %{REQUEST_URI} !maintenance.htm$ [NC]
RewriteRule "/en/wiki/.*" "/en/wiki/maintenance.htm" [R=302,L]
RewriteCond %{REQUEST_URI} !maintenance.htm$ [NC]
RewriteRule "/es/wiki/.*" "/es/wiki/maintenance.htm" [R=302,L]
RewriteCond %{REQUEST_URI} !maintenance.htm$ [NC]
RewriteRule "/de/wiki/.*" "/de/wiki/maintenance.htm" [R=302,L]

相关内容