Flask App 404在子目录中

时间:2017-01-30 06:30:41

标签: apache flask

我试图在http://<my-server.com>/UserControl

上运行烧瓶

以下是相关文件:

的Apache

<VirtualHost *:80>   
    ServerName <redacted>
    ServerAdmin webmaster@localhost

    # not needed actually because we're proxying everything to Tomcat, but just leave it to make Apache happy
    DocumentRoot /var/www/html
    DirectoryIndex index.php


    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

  <Location /alpha>
     AuthType Basic
     AuthName "Restricted Access - Authenticate"
     AuthUserFile /etc/httpd/htpasswd.users
     Require valid-user
   </Location>

   <Location /UserControl>
        AuthType Basic
        AuthName "Restricted Access - Authenticate"
        AuthUserFile /etc/httpd/htpasswd.users
        Require valid-user
   </Location>

  Redirect /alpha /alpha/
  ProxyPass /alpha/ http://127.0.0.1:3838/alpha/
  ProxyPassReverse /alpha/ http://127.0.0.1:3838/alpha/


  WSGIDaemonProcess UserControl user=ubuntu group=ubuntu threads=5
  WSGIScriptAlias /UserControl/ /home/ubuntu/FlaskApps/UserControl/UserControl.wsgi

  <Directory /home/ubuntu/FlaskApps/UserControl>
            WSGIProcessGroup UserControl
            WSGIApplicationGroup %{GLOBAL}
            WSGIScriptReloading On
            Order deny,allow
            #Allow from all
            Require all Granted
   </Directory>



</VirtualHost>

请注意,我还有一些其他目录可以运行。

我的相关.py和.wsgi文件是:

UserControl.py

from flask import Flask
app = Flask(__name__)

@app.route("/UserControl")
def main():
    return "Welcome!"

if __name__== "__main__":
    app.run()

UserControl.wsgi

import sys, os
sys.path.insert (0,'/home/ubuntu/FlaskApps/UserControl')
#os.chdir("/home/ubuntu/FlaskApps")
from UserControl import app as application

文件位于

/home/ubuntu/FlaskApps/UserControl

但是当我访问时:

http://<my-server.com/>UserControl我得到了404(通过FLASK! - 所以apache似乎正确路由)

我到底错过了什么?

1 个答案:

答案 0 :(得分:0)

您在不使用尾部斜杠的情况下定义了路径。您的反向代理可能会重定向到的路径斜杠。以这种方式定义路由时,使用尾部斜杠访问URL将产生404“未找到”错误。这包含在quickstart guide

你可以禁用&#39;严格斜线&#39;或使用尾部斜杠定义路线。

来自文档:

  

采取以下两条规则:

@app.route('/projects/')
def projects():
    return 'The project page'

@app.route('/about')
def about():
    return 'The about page'
  

虽然它们看起来很相似,但它们在URL定义中对尾部斜杠的使用有所不同。在第一种情况下,项目端点的规范URL具有尾部斜杠。从这个意义上说,它类似于文件系统上的文件夹。在没有尾部斜杠的情况下访问它将导致Flask重定向到带有斜杠的规范URL。

     

但是,在第二种情况下,URL的定义没有斜杠,而是类似UNIX类系统上文件的路径名。使用尾部斜杠访问URL将产生404“未找到”错误。

     

此行为允许相对URL继续工作,即使省略了尾部斜杠,这与Apache和其他服务器的工作方式一致。此外,URL将保持唯一,这有助于搜索引擎避免两次索引相同的页面。