瓶应用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似乎路由正确)
我究竟发现了什么?
您在不使用尾部斜线的情况下定义了路线。您的反向代理很可能会通过斜杠重定向到路线。以这种方式定义路由时,使用尾部斜线访问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和其他服务器的工作方式一致。此外,这些网址将保持唯一性,这有助于搜索引擎避免将相同的网页编入索引两次。
我已将其更改为@ app.route(“/ UserControl /”),我仍然不喜欢。 – user1357015
尝试将请求记录到文件或查看调试输出。你应该看到'127.0.0.1 - - [30/Jan/2017 12:24:31]“GET /favicon.ico HTTP/1.1”404-',它会告诉你什么路由被请求导致404。请验证Flask应用程序看到的路线。 – sytech
调试输出在哪里?我是新手......我可以向你展示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)'
您是否打开了调试?来自Flask的任何错误报告? – coralvanda
我正是这个问题...我有点惊讶这不是一个更受欢迎的话题。你的解决方案是什么?@ user1357015? – esoterydactyl