我正在尝试仅在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]
答案 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]