Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Openshift使用flask基本示例重定向到https_Python_.htaccess_Flask_Openshift - Fatal编程技术网

Python Openshift使用flask基本示例重定向到https

Python Openshift使用flask基本示例重定向到https,python,.htaccess,flask,openshift,Python,.htaccess,Flask,Openshift,我正在尝试在Openshift上的free gear上运行基于烧瓶的应用程序,但只在https上运行。以下-我已将.htaccess文件添加到我的repo的根目录中,但它似乎被忽略,因为它没有重定向。这篇文章讨论了一个wsgi目录,但我没有,所以我不确定这个地方。我使用以下方法创建了应用程序: 我对OpenShift设置的理解是,.htaccess文件只能与静态文件一起使用,而不是应用程序的动态部分。要使用标准的Apache/mod_wsgi设置,您必须使用一个wsgi中间件来包装您的Flask

我正在尝试在Openshift上的free gear上运行基于烧瓶的应用程序,但只在https上运行。以下-我已将
.htaccess
文件添加到我的repo的根目录中,但它似乎被忽略,因为它没有重定向。这篇文章讨论了一个
wsgi
目录,但我没有,所以我不确定这个地方。我使用以下方法创建了应用程序:


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

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

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


更新1

FWIW,我的理解是,这仅适用于设置OpenShift的旧样式的“wsgi/static”目录,因为实际的wsgi应用程序将使用WSGIScriptAlias指令进行映射

除了在Apache配置文件的目录块中设置的文件系统访问权限外,WSGIScriptAlias在mod_wsgi中为要查询的WSGIScriptAlias指令引用的目录中的.htaccess文件工作的方式从来没有特定的意图。看起来这实际上是可能的,至少在Apache2.X中是可能的,但不确定Apache1.3是否也适用,尽管它可能也适用于Apache2.X

因此,OpenShift的人似乎偶然发现了一些可能的东西,这些东西在mod_wsgi中没有记录,而我作为编写mod_wsgi的人,甚至都没有期望它一定会起作用。我现在必须仔细考虑这一点,因为在.htaccess文件中可能有一些事情可以做,这会影响mod_wsgi的工作方式。它还可能为无法访问主要Apache配置的用户提供一些奇怪的可能性,可能是好的,也可能是坏的

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

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

如果他们对“wsgi”子目录做了这样的操作,那么当他们切换到首选顶部目录中的“wsgi.py”时,似乎对根目录做了同样的操作


无论哪种方式,使用我提到的mod_wsgi-express都会让您对Apache和mod_wsgi的设置有更高级别的控制。预屏蔽配置不是很灵活,一些基于齿轮尺寸的配置猜测不一定合适,因为它们没有考虑应用程序本身的要求,只有用户才会知道。

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

正如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] 

非常感谢,它让我意识到了选项是什么,而且我对openshift默认的
mod_wsgi
设置很满意,所以我刚刚用这个基础创建了一个新的应用程序,
。htaccess
工作起来很有魅力。我将其标记为已回答,因为这是一篇非常好的文章,它提供了足够的洞察力,以了解您需要什么。ChearsAfter在读了更多之后,它实际上让我更加困惑:)我不熟悉python web开发,我已经使用python很多年了,但这是我的第一个python web应用程序。不管怎样,Follow帮我解决了这个问题。我不知道
mod\u wsgi
是如何设置的,但是将
.htaccess
放在根目录下工作。我甚至可以把WSGI特有的东西,比如
WSGIPassAuthorization
放进去,它就可以工作了。我想说,对于简单的应用程序来说,这就足够了。非常感谢您的澄清,这很有帮助。是的,
WSGIPassAuthorization
如果允许
Auth
覆盖,就会起作用,如果
AllowOverride,所有的
都会覆盖它。我没有,请参阅我用作项目基础的。没有
wsgi
目录,它不使用标准的Apache/mod_wsgi,而是使用
app.py
方法,因此,我切换到Apache/mod_wsgi设置,现在一切都正常了。我认为围绕“wsgi”目录的混淆可能是OpenShift从内存支持不同的方式随时间提供wsgi脚本文件。当前升级的是在top目录中提供“wsgi.py”。但它也支持将其称为“wsgi/application”。在后一种情况下,还可以在“wsgi/static”中提供static。问题是,当您查看生成的Apache配置时,在使用“wsgi.py”时,“wsgi”子目录中显示不支持“.htaccess”。生成配置的脚本必须自动执行
RewriteEngine on                                                                
RewriteCond %{HTTP:X-Forwarded-Proto} !https                                    
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R,L]