후행 슬래시는 Flask 경로 규칙에서 404를 트리거합니다.
모든 경로 /users
를 정적 앱 으로 리디렉션하고 싶습니다 . 다음보기는 이러한 경로를 캡처하고 적절한 파일을 제공해야합니다 (이 예제의 경로 만 인쇄 함). 이것은 작동 /users
, /users/604511
및 /users/604511/action
. 경로로 /users/
인해 404 오류가 발생하는 이유는 무엇 입니까?
@bp.route('/users')
@bp.route('/users/<path:path>')
def serve_client_app(path=None):
return path
귀하의 /users
경로는 슬래시, 슬래시 일치하지에 명시 적 규칙으로 WERKZEUG의 해석이 없습니다. 후행 슬래시를 추가하면 Werkzeug가 URL에없는 경우 리디렉션하거나 strict_slashes=False
경로에 설정 하면 Werkzeug가 슬래시가 있거나없는 규칙과 일치합니다.
@app.route('/users/')
@app.route('/users/<path:path>')
def users(path=None):
return str(path)
c = app.test_client()
print(c.get('/users')) # 302 MOVED PERMANENTLY (to /users/)
print(c.get('/users/')) # 200 OK
print(c.get('/users/test')) # 200 OK
@app.route('/users', strict_slashes=False)
@app.route('/users/<path:path>')
def users(path=None):
return str(path)
c = app.test_client()
print(c.get('/users')) # 200 OK
print(c.get('/users/')) # 200 OK
print(c.get('/users/test')) # 200 OK
strict_slashes
모든 URL에 대해 설정할 수도 있습니다 .
app.url_map.strict_slashes = False
그러나 대부분의 경우 엄격한 슬래시를 비활성화하지 않아야합니다. 문서는 이유를 설명합니다.
이 동작을 통해 아파치 및 기타 서버의 작동 방식에 따라 후행 슬래시가 생략 된 경우에도 상대 URL이 계속 작동 할 수 있습니다. 또한 URL은 고유하게 유지되므로 검색 엔진이 동일한 페이지를 두 번 색인하는 것을 방지 할 수 있습니다.
엄격한 슬래시를 비활성화하려면 GLOBALLY; 다음 url_map.strict_slashes = False
과 같이 설정하십시오 .
app = Flask(__name__)
app.url_map.strict_slashes = False
이렇게하면 strict_slashes=False
각보기 에 사용할 필요가 없습니다 .
그런 다음 다음과 같이 후행 슬래시없이 경로를 정의하면됩니다.
bp = Blueprint('api', __name__, url_prefix='/api')
@bp.route('/my-route', methods=['POST'])
다음 /my-route
과 /my-route/
작품 모두 동일.
이는 Werkzeug와 다른 HTTP 서버의 일관성 때문입니다. Flask의 빠른 시작 문서를 살펴보세요 . 관련 단락 :
고유 URL / 리디렉션 동작
Flask의 URL 규칙은 Werkzeug의 라우팅 모듈을 기반으로합니다. 이 모듈의이면에있는 아이디어는 Apache 및 이전 HTTP 서버에서 정한 선례를 기반으로 아름답고 고유 한 URL을 보장하는 것입니다.
다음 두 가지 규칙을 따르십시오.
@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 "찾을 수 없음"오류가 발생합니다.
This behavior allows relative URLs to continue working even if the trailing slash is omitted, consistent with how Apache and other servers work. Also, the URLs will stay unique, which helps search engines avoid indexing the same page twice.
So just add /users/
as well to the routing.
참고URL : https://stackoverflow.com/questions/33241050/trailing-slash-triggers-404-in-flask-path-rule
'development' 카테고리의 다른 글
파이썬 : 디렉토리를 두 단계 위로 가져 오기 (0) | 2020.12.03 |
---|---|
Git 병합을 해제하는 방법은 무엇입니까? (0) | 2020.12.03 |
설치 후 Visual Studio 2017 커뮤니티를 시작할 때 "알 수없는 오류"발생 (0) | 2020.12.03 |
Python 객체 자체 삭제 (0) | 2020.12.03 |
SVN에서 업데이트 할 때 항상 (강제) 로컬 변경 사항을 덮어 쓸 수 있습니까? (0) | 2020.12.03 |