根据标题,Apache2.4似乎在URL中添加了'/‘(根据request.url),而Flask的路径与它不匹配或不匹配。
(相关)文件结构
/var/www/wsgi
...
├── dizmo
│ └── __init__.py
├── foo.wsgi
├── hello1.wsgi
└── __pycache__
└── adapter.cpython-35.pycfoo.wsgi
import sys
import inspect
sys.path.append('/var/www/wsgi')
from dizmo import app as applicationdizmo/__init__.py
from flask import Flask, request
import inspect
import sys
app = Flask(__name__)
app.debug = True
print( "app.config['SERVER_NAME']={}".format(app.config['SERVER_NAME']) )
print("{}:{} (outside)".format( inspect.currentframe().f_code.co_filename, inspect.currentframe().f_lineno ) )
@app.route('/foo')
@app.route('/foo/')
def tattletale():
return 'I\'m foo'
@app.errorhandler(404)
def err_handler_404(error):
return '{}: no route'.format(request.url), 404mysite.conf
<VirtualHost *:9000>
<Directory /var/www/wsgi>
Require all granted
DirectorySlash Off
</Directory>
WSGIDaemonProcess CDRDB processes=2 threads=15 display-name=%{GROUP} python-path=/var/www/python-packages
WSGIProcessGroup CDRDB
WSGIScriptReloading On
WSGIScriptAlias /foo /var/www/wsgi/foo.wsgi
WSGIScriptAlias /hello1 /var/www/wsgi/hello1.wsgi
</VirtualHost>当它运行时:
curl http://127.0.0.1:9000/foo
http://127.0.0.1:9000/foo/: no route注意request.url中的尾斜杠。
在添加404处理程序之前,我在Reddit上浏览了20多条关于路线的帖子,现在我已经筋疲力尽了。没有'foo‘目录,所以DirectorySlash甚至都不重要。
编辑:strict_slashes=False似乎没有改变任何东西,也没有使用单一的装饰器/foo或/foo/。
编辑2:显然,Apache或mod_wsgi在路径中玩把戏,而/foo/foo不知怎么起作用。Flask独立服务器的工作方式与预期相同:
curl http://127.0.0.1:9000/foo/foo # Apache
I'm foo. route=http://127.0.0.1:9000/foo/foo
curl http://127.0.0.1:5000/foo # flask run
I'm foo. route=http://127.0.0.1:5000/foo--
>>> flask.__version__
'0.12.2'
>>> sys.version_info
sys.version_info(major=3, minor=5, micro=2, releaselevel='final', serial=0)
$ apachectl -v
Server version: Apache/2.4.18 (Ubuntu)
Server built: 2017-09-18T15:09:02发布于 2018-03-07 01:00:17
您的WSGIScriptAlias配置错误。您的应用程序由Apache相对于/foo提供。
要获得想要的行为,别名应该是根目录的别名,即/而不是/foo。
发布于 2018-03-06 22:36:09
你应该只使用一个装饰
@app.route('/foo')
@app.route('/foo/')第二个装饰器也用最后的斜线造成重定向。
发布于 2018-03-07 09:40:13
您不需要在第二个装饰器中指定斜杠,烧瓶将自动重定向到与url关联的控制器。
我还建议你把第二个装饰师.
https://stackoverflow.com/questions/49140718
复制相似问题