使用htaccess进行维护页面转发对代理材料不起作用



我已经搜索了互联网,并且对于为什么我的维护页面重定向和重写规则不适用任何代理材料或通过https遇到的任何内容感到困惑。

我使用的是Apache 2.2.3服务器,安装了tomcat 6.0.24。

我有以下htaccess文件:

Options +FollowSymlinks
RewriteCond %{REQUEST_URI} !/maintenance.html
RewriteCond %{REQUEST_URI} !/images/(.*)$
RewriteCond %{REQUEST_URI} !/scripts/(.*)$
RewriteCond %{REQUEST_URI} !/styles/(.*)$
RewriteCond %{REMOTE_ADDR) !^123.456.789.100
RewriteRule $ /maintenance.html [R=302,L]

它将我所有的http页面重定向到维护页面,并且我所有的图像,脚本和样式都能正常工作。但是,它不会重定向来自其他机器的代理的任何https页面。

因此http://mypage.com/documents重定向到维护,而https://mypage.com/users没有重定向。

不幸的是,users是一个驻留在后端服务器上的代理服务,而documents是前端服务器上的静态页面。

是否有一种方法可以强制代理和/或https材料被重定向?或者我是否可以在我的htaccess文件中禁用mod_proxy,这样就不会被代理了?

  • 检查SSL虚拟主机正在读取.htaccess文件(AllowOverride None指令)。
  • 避免.htaccess文件像瘟疫一样。它是一个动态配置文件。其余的配置(在apache文件中)是静态的,这对性能有很大的影响。但这是无关的:-)
  • 一些指令优先于其他指令,在执行的顺序上有一个优先级。在这个文档链接中,你可以看到任何代理指令都是在任何目录指令之前读取的(.htaccess是一个子目录指令)。因此,如果您的代理不是由。htaccess中的mod重写P标签处理(无论如何,这是一个坏主意),它之前应用过,并且很可能您的。htaccess从未被读取(您正在请求代理,没有本地文件要读取,因此Apache没有本地目录要读取,因此Apache不需要解析所有现有的。htaccess文件从一个不存在的目录和所有他的父母)

一个解决方案,如果你可以编辑真正的配置文件,是在VirtualHost级别使用重定向,而不是在目录(或。htaccess)或位置。因此它将始终被应用:

ErrorDocument 503 /htdocs/err/maintenance.html
## uncomment below to enter maintenance mode
RedirectMatch 503 ^/(?!err/|images/|scripts/)

我通常使用一个更简单的形式,只在/err子目录中包含元素,并将不在此子目录中的所有元素重定向到503错误。503然后由该err子目录中的维护页处理。在这里,我添加了images/scripts/子目录,也没有测试表达式,但它应该工作,我认为。

最新更新