使用基于烧瓶的示例将Openshift重定向到https

时间:2015-06-16 11:21:58

标签: python .htaccess flask openshift

我正在尝试仅在https上在Openshift上运行基于烧瓶的应用程序。在this之后 - 我已将.htaccess文件添加到我的仓库的根目录中,但它似乎被忽略了,因为它没有重定向。这篇文章谈到了wsgi目录,但我没有,所以我不确定这个地方。我使用this example创建了应用:

$cat .htaccess 

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

3 个答案:

答案 0 :(得分:1)

我对OpenShift设置的理解是.htaccess文件只能与静态文件一起使用,而不能与应用程序的动态部分一起使用。要使用标准的Apache / mod_wsgi设置,您必须使用包装Flask应用程序的WSGI中间件来强制重定向。

我能提供的唯一替代方案是,您可以使用他们提供的标准Apache / mod_wsgi安装步骤,而是使用mod_wsgi-express,如下所述:

当使用mod_wsgi-express时,我将能够解释一种添加额外Apache配置片段以触发重定向的方法。

更新1

FWIW,我的理解是,这只能用于设置OpenShift的旧式'wsgi / static'目录,因为实际的WSGI应用程序已经使用WSGIScriptAlias指令进行了映射。

除了在Apache配置文件的Directory块中设置的文件系统访问权限之外,WSGIScriptAlias在mod_wsgi中为WSGIScriptAlias指令引用的目录中的.htaccess文件工作的方式从来没有特定的意图。请咨询。看起来这实际上是可行的,至少对于Apache 2.X,不确定Apache 1.3,尽管它也可能在那里工作。

所以看起来OpenShift的人们偶然发现了一些可能没有为mod_wsgi记录的内容,而且我作为编写mod_wsgi的人甚至没想到必然会工作。我现在必须考虑这个问题,因为在.htaccess文件中可能会有一些事情可以解决mod_wsgi的工作方式。它也可能为那些无法访问主Apache配置的用户提供一些奇怪的可能性,可能是好的,但也可能是坏的。

重申我在其他评论中所说的内容,OpenShift支持两种不同的方式来设置WSGI应用程序。较旧的方法是创建一个名为“wsgi”的子目录,并在其中添加一个“应用程序”文件,该文件将是WSGI脚本文件。静态文件也可能有一个'wsgi / static'目录。他们记录并且现在似乎建议的更新方式是在项目的根目录中为WSGI脚本文件创建“wsgi.py”文件。可以使用“rhc set-env”设置的环境变量覆盖此名称。

我还没有检查它们为旧配置的配置生成了什么,但是他们可以设置Apache配置以允许在'wsgi'子目录中覆盖Apache,这意味着可以在那里放置.htaccess文件。这不是正常的做法,但似乎他们发现它可以工作并允许某些类型的覆盖。

如果他们已经为'wsgi'子目录做了这个,那么当他们切换到顶层目录中更喜欢'wsgi.py'时,它们似乎对根目录做了同样的事情。

无论哪种方式,正如我所提到的那样使用mod_wsgi-express将使您对Apache和mod_wsgi的设置方式有更高的控制权。预先固定的配置并不是非常灵活,并且基于齿轮尺寸进行配置的一些猜测不一定合适,因为它们没有考虑应用程序本身的要求,只有用户才知道。 / p>

答案 1 :(得分:0)

.htaccess文件需要进入python应用程序中的wsgi文件夹。

答案 2 :(得分:0)

正如Graham Dumpleton所说,OpenShift支持Python应用程序的不同布局。如果您使用的是wsgi.py方法,请执行以下操作将所有请求重定向到https:

mkdir wsgi
mv wsgi.py wsgi/application
touch wsgi/.htaccess

将以下内容添加到.htaccess文件中:

RewriteEngine on                                                                
RewriteCond %{HTTP:X-Forwarded-Proto} !https                                    
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]