瓶应用404子目录

问题描述:

我想有烧瓶运行在http://<my-server.com>/UserControl瓶应用404子目录

以下是相关文件:

阿帕奇

<VirtualHost *:80> 
    ServerName <redacted> 
    ServerAdmin [email protected] 

    # 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似乎路由正确)

我究竟发现了什么?

+0

您是否打开了调试?来自Flask的任何错误报告? – coralvanda

+0

我正是这个问题...我有点惊讶这不是一个更受欢迎的话题。你的解决方案是什么?@ user1357015? – esoterydactyl

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

您可以禁用'strict slashes'或使用尾部斜线定义路线。

从文档:

采取以下两条规则:

@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和其他服务器的工作方式一致。此外,这些网址将保持唯一性,这有助于搜索引擎避免将相同的网页编入索引两次。

+0

我已将其更改为@ app.route(“/ UserControl /”),我仍然不喜欢。 – user1357015

+0

尝试将请求记录到文件或查看调试输出。你应该看到'127.0.0.1 - - [30/Jan/2017 12:24:31]“GET /favicon.ico HTTP/1.1”404-',它会告诉你什么路由被请求导致404。请验证Flask应用程序看到的路线。 – sytech

+0

调试输出在哪里?我是新手......我可以向你展示Apache的请求? '0123/1/2017:22:00:40 +0000]“GET/UserControl/HTTP/1.1”404 429“ - ”“Mozilla/5.0(Macintosh; Intel Mac OS X 10.11; rv:50.0)' - Gecko/20100101 Firefox/50.0“' – user1357015