首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >烧瓶添加拖尾斜杠到URL,没有匹配的路线

烧瓶添加拖尾斜杠到URL,没有匹配的路线
EN

Stack Overflow用户
提问于 2018-03-06 22:01:10
回答 3查看 1.8K关注 0票数 1

根据标题,Apache2.4似乎在URL中添加了'/‘(根据request.url),而Flask的路径与它不匹配或不匹配。

(相关)文件结构

代码语言:javascript
复制
/var/www/wsgi
...
├── dizmo
│   └── __init__.py
├── foo.wsgi
├── hello1.wsgi
└── __pycache__
    └── adapter.cpython-35.pyc

foo.wsgi

代码语言:javascript
复制
import sys
import inspect
sys.path.append('/var/www/wsgi')
from dizmo import app as application

dizmo/__init__.py

代码语言:javascript
复制
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), 404

mysite.conf

代码语言:javascript
复制
<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>

当它运行时:

代码语言:javascript
复制
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独立服务器的工作方式与预期相同:

代码语言:javascript
复制
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

--

代码语言:javascript
复制
>>> 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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-07 01:00:17

您的WSGIScriptAlias配置错误。您的应用程序由Apache相对于/foo提供。

要获得想要的行为,别名应该是根目录的别名,即/而不是/foo

票数 3
EN

Stack Overflow用户

发布于 2018-03-06 22:36:09

你应该只使用一个装饰

代码语言:javascript
复制
@app.route('/foo')
@app.route('/foo/')

第二个装饰器也用最后的斜线造成重定向。

票数 0
EN

Stack Overflow用户

发布于 2018-03-07 09:40:13

您不需要在第二个装饰器中指定斜杠,烧瓶将自动重定向到与url关联的控制器。

我还建议你把第二个装饰师.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49140718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档