Web2Py 生产 - 使用参数对默认索引进行重定向(可能使用 nginx)
Web2Py Production - making redirections on default index with parameters (maybe with nginx)
我正在尝试使用 web2py 从有效的默认索引页面(或只是 domain/package 的路由)创建重定向。
某些关键字(例如 'about',存储在列表中)不会重定向。但是,所有不在该列表中的都将重定向。
期望的行为是:
https://startbean.com/about -> No redirect
https://startbean.com/myc -> https://startbean.com/company/myc
startbean.com 处显示的默认页面来自包 'default',名为 'index'。如果重定向如下所示,那就很容易了:
https://startbean.com/default/about -> No redirect
https://startbean.com/default/index/myc -> https://startbean.com/default/company/myc
因为 myc
是一个 URL 参数。但是当它来自根目录时,Web2Py 尝试打开一个名为 'myc' 的包,然后发现没有页面(索引或控制器函数)所以错误。
处理此问题的最佳方法是什么?我尝试使用 routes.py,但无法找到执行此操作的方法(我很确定它不受支持)。我考虑过将 /
之后的令牌重定向到一个名为 /default/redirect/<token>
的页面,然后由该页面决定重定向,但无法停止无限循环。另一种可能的解决方案是对 nginx 配置进行调整,以便在 /
之后有一个标记时重定向,但我再次认为这会导致 about
.
出现问题
也许有一个我没有找到的控制器的包罗万象的功能?我浏览了 web2py 这本书,但一无所获 - 欢迎任何想法!
谢谢,
山姆
可以使用parameter-based rewrite system。在 routes.py 中包括:
routers = dict(
BASE=dict(
default_application='yourapp',
default_controller='default',
default_function='company',
functions=['index', 'company', 'user', 'download', 'call']
),
)
注意,functions
应该是 default.py 控制器中所有函数的列表。
如果您转到 /some_token,它将路由到 /yourapp/default/company/some_token,除非 some_token 是 "yourapp"、"default"、"company" ,或 functions
列表中的任何功能(在这种情况下,它会假定您实际上是在请求 "yourapp" 应用程序、"default" 控制器或来自控制器的特定功能) .
请注意,如果您只是转到根 URL(即 http://yourdomain.com/),它将路由到 /yourapp/default/company/,没有 URL arg,所以你应该为这种情况做好准备。
所以我找到了解决方案(抱歉延迟发布):
在web2py目录的路径routes.py
中,我在routes_in中添加了一条规则,所以这是在我的文件中:
routes_in = (
('/(?!about)$token', '/company/$token'),
)
管理默认应用程序(从 URL 中删除应用程序名称和默认包名称),我这样做了(不需要重定向工作):
routers = dict(
BASE = dict(default_application='startbean'),
)
一切都成功了:)
我正在尝试使用 web2py 从有效的默认索引页面(或只是 domain/package 的路由)创建重定向。 某些关键字(例如 'about',存储在列表中)不会重定向。但是,所有不在该列表中的都将重定向。
期望的行为是:
https://startbean.com/about -> No redirect
https://startbean.com/myc -> https://startbean.com/company/myc
startbean.com 处显示的默认页面来自包 'default',名为 'index'。如果重定向如下所示,那就很容易了:
https://startbean.com/default/about -> No redirect
https://startbean.com/default/index/myc -> https://startbean.com/default/company/myc
因为 myc
是一个 URL 参数。但是当它来自根目录时,Web2Py 尝试打开一个名为 'myc' 的包,然后发现没有页面(索引或控制器函数)所以错误。
处理此问题的最佳方法是什么?我尝试使用 routes.py,但无法找到执行此操作的方法(我很确定它不受支持)。我考虑过将 /
之后的令牌重定向到一个名为 /default/redirect/<token>
的页面,然后由该页面决定重定向,但无法停止无限循环。另一种可能的解决方案是对 nginx 配置进行调整,以便在 /
之后有一个标记时重定向,但我再次认为这会导致 about
.
也许有一个我没有找到的控制器的包罗万象的功能?我浏览了 web2py 这本书,但一无所获 - 欢迎任何想法!
谢谢,
山姆
可以使用parameter-based rewrite system。在 routes.py 中包括:
routers = dict(
BASE=dict(
default_application='yourapp',
default_controller='default',
default_function='company',
functions=['index', 'company', 'user', 'download', 'call']
),
)
注意,functions
应该是 default.py 控制器中所有函数的列表。
如果您转到 /some_token,它将路由到 /yourapp/default/company/some_token,除非 some_token 是 "yourapp"、"default"、"company" ,或 functions
列表中的任何功能(在这种情况下,它会假定您实际上是在请求 "yourapp" 应用程序、"default" 控制器或来自控制器的特定功能) .
请注意,如果您只是转到根 URL(即 http://yourdomain.com/),它将路由到 /yourapp/default/company/,没有 URL arg,所以你应该为这种情况做好准备。
所以我找到了解决方案(抱歉延迟发布):
在web2py目录的路径routes.py
中,我在routes_in中添加了一条规则,所以这是在我的文件中:
routes_in = (
('/(?!about)$token', '/company/$token'),
)
管理默认应用程序(从 URL 中删除应用程序名称和默认包名称),我这样做了(不需要重定向工作):
routers = dict(
BASE = dict(default_application='startbean'),
)
一切都成功了:)