2

我正在尝试为 Rails 应用程序的 Phusion Passenger 上的 suburi 部署设置维护页面。所有文档都显示了 DocumentRoot ReWrite 规则,这些规则不会出现(不认为应该)在 suburis 上重写。我尝试修改 ReWrite 规则以指向 suburi,但我似乎无法让它工作。有没有人能够得到一个有效的设置?

4

2 回答 2

0

我有完全相同的问题。虽然我使用的是前置过滤方式,但其实我很讨厌这种方式。

更新和回答

如果我有多个子 uri,这将起作用,这里唯一缺少的是我无法将标头设置为 503,因为 ErrorDocument 依赖于一个静态文件,我无法确定它在运行时的位置。

假设 app1 和 app2 是我的子 uri 之一

RewriteEngine On
RewriteCond %{REQUEST_URI} !.(css|gif|jpg|png)$
RewriteCond %{DOCUMENT_ROOT}/$1/system/maintenance.html -f
RewriteCond %{SCRIPT_FILENAME} !maintenance.html
RewriteRule ^/([^/]+)(/|/.*)?$ /$1/system/maintenance.html [L]

RailsBaseURI /app1
RailsBaseURI /app2
于 2010-07-03T08:18:47.253 回答
0

所以我终于有一些时间来处理这个问题,发现你实际上可以使用 mod_rewrite 方法来处理维护页面,并进行一些调整。请记住,对于子域,在根目录中创建了一个指向应用程序公共目录的符号链接。现在,如果公共目录包含维护文件(或在子目录中),您可以连接 mod_rewrite 来找到它。

例如假设应用程序名为app1maintenance.html文件存储在公共目录的子目录系统中。以下是 apache 配置文件中的行,无论是在RailsBaseURI /app1行之前还是之后声明它似乎都无关紧要

RewriteEngine on
RewriteCond %{DOCUMENT_ROOT}/app1/system/maintenance.html -f
RewriteCond %{SCRIPT_FILENAME} !maintenance.html
RewriteRule ^.*$ /app1/system/maintenance.html [L]

RailsBaseURI /app1
于 2010-07-08T16:44:25.150 回答