使用htaccess转发维护页面不适用于代理材料

时间:2011-11-18 13:50:06

标签: apache .htaccess mod-rewrite ssl reverse-proxy

我已经浏览了互联网,并且不知道为什么我的维护页面重定向和重写规则不适用于任何代理材料或通过https传播的任何内容。

我正在使用安装了tomcat 6.0.24的Apache 2.2.3服务器。

我有以下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不会重定向。

不幸的是,用户是代理服务,它位于后端服务器上,而文档是前端服务器上的静态页面。

是否有办法强制代理和/或https材料重定向?或者我能否在我的htaccess文件中禁用mod_proxy以便不会代理任何内容?

1 个答案:

答案 0 :(得分:0)

  • 检查您的SSL虚拟主机是否正在阅读.htaccess个文件(AllowOverride None指令)。
  • 避免像瘟疫这样的.htaccess文件。这是一个动态配置文件。其余的配置(在apache文件中)是静态的,在性能上有很大的不同。但它无关: - )
  • 某些指令优先于其他指令there is a priority in the order of execution。在本文档链接中,您可以看到在任何Directory指令(以及.htaccess是子子目录指令)之前读取任何Proxy指令。所以,如果你的代理不是由.htaccess中的mod-rewrite 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/子目录,没有测试表达式,但它应该可以工作,我想。