我正在尝试做一个简单的重定向到维护页面,但是似乎 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]
- mod_rewrite 已启用
- 已启用 AllowOverride All
- 我测试了我的正则表达式https://regex101.com/r/jN2kA7/1
- RewriteRule ^.*$ Maintenance.htm [R=302,L] 奇怪地重定向到http://myserver/var/www/wiki/maintenance.htm
目标是将“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]