Python Web2Py生产-使用参数在默认索引上进行重定向(可能使用nginx)

Python Web2Py生产-使用参数在默认索引上进行重定向(可能使用nginx),python,redirect,nginx,web2py,Python,Redirect,Nginx,Web2py,我试图使用web2py从默认的索引页(或者仅仅是域/包的路由)创建重定向。 某些关键字(例如“about”,存储在列表中)无法重定向。然而,所有不在该列表中的都将重定向 理想的行为是: https://startbean.com/about -> No redirect https://startbean.com/myc -> https://startbean.com/company/myc startbean.com上显示的默认页面来自包“default”,称为“index”。

我试图使用web2py从默认的索引页(或者仅仅是域/包的路由)创建重定向。 某些关键字(例如“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/
的页面,该页面将决定重定向,但无法停止无限循环。另一个可能的解决方案是对nginx配置进行调整,以便在
/
之后有一个令牌时重定向,但我再次认为这会导致关于
出现问题

也许我还没有找到一个针对控制器的全包函数?我翻阅了web2py的书,没有发现任何东西-任何想法都是非常受欢迎的

谢谢

Sam

您可以使用。在routes.py中包括:

routers = dict(
    BASE=dict(
        default_application='yourapp',
        default_controller='default',
        default_function='company',
        functions=['index', 'company', 'user', 'download', 'call']
    ),
)
注意,
函数
应该是default.py控制器中所有函数的列表

如果您转到/some_-token,它将路由到/yourapp/default/company/some_-token,除非某个_-token是“yourapp”、“default”、“company”或
functions
列表中的任何函数(在这种情况下,它将假定您实际请求的是“yourapp”应用程序、“default”控制器,或来自控制器的特定函数)

请注意,如果您只需转到根URL(即),它将路由到/yourapp/default/company/,没有URL参数,因此您应该对此做好准备。

因此我找到了解决方案(很抱歉延迟发布):

在web2py目录的route处的
routes.py
中,我在routes_In中添加了一条规则,因此它位于我的文件中:

routes_in = (
  ('/(?!about)$token', '/company/$token'),
)
为了管理默认应用程序(从URL中删除应用程序名和默认包名),我这样做了(重定向不需要):


这一切都起了作用:)

在中,company是控制器,myc是函数,还是完整的web2py URL真的是/default/company/myc(即company是函数,myc是URL arg),您想删除/default/company部分?@Anthony后者。我应该把myc写成或-完整的应用程序URL是
/default/company/myc
,而
myc
是一个URL参数。删除
/default/company
位可能是一个很酷的奖励-但老实说,主要的事情是让页面访问能够在URL栏中输入URL,而不需要
/default/company
部分(这样某人就可以共享URL:startbean.com/myc并进入startbean.com/company/myc页面)。有什么想法吗?web2py包括两个不同的URL重写系统。更简单的基于参数的系统允许您指定默认应用程序、控制器和功能(在每个控制器内)。如果“company”是默认控制器中唯一要隐藏的函数,则可以采用这种方法。如果合适的话,我可以详细说明解决方案。或者,您可以使用更复杂的基于模式的系统创建任意重写规则。
routers = dict(
  BASE  = dict(default_application='startbean'),
)