<p>好吧,我想我明白了。我还没有遇到过URL()无法生成正确字符串的情况。我认为这可以进一步简化,但这里是:</p>
<pre><code>routes_in = (
#Map the default index to '/'
('/', '/myapp/default/index'),
#Allow the admin application to be accessed
('/a', '/a/default/index'),
('/a/$anything', '/a/$anything'),
#Re-wire actions as controllers unless the controller is also specified
('/$controller', '/myapp/$controller/index'),
('/$controller/', '/myapp/$controller/index'),
('/$controller/$action', '/myapp/$controller/$action'),
#Map static access to our application
('/static/$anything', '/myapp/static/$anything'),
)
#Reverse only some of the mappings so that URL() works correctly
routes_out = (
('/myapp/default/index', '/'),
('/a/$anything', '/a/$anything'),
('/myapp/$controller/index', '/$controller'),
('/myapp/$controller/$action', '/$controller/$action'),
('/myapp/static/$anything', '/static/$anything'),
)
</code></pre>
<p>我将“admin”应用程序重命名为“a”。每当我调用URL()时,我必须显式传递2个参数。第一个参数始终是控制器的名称,第二个参数始终是紧随任何GET请求变量的操作名称。E、 g.<code>URL('default', 'index')</code>用于主索引页,<code>URL('foo', 'bar?param=3')</code>用于<code>foo</code>中的操作<code>bar</code>,并指定了<code>param</code>。但是,不允许使用<code>URL('foo', '?indexParam=test')</code>,因为在第二个参数中的变量之前没有指定<code>index</code>。只要我遵守这些规则,一切似乎都能始终如一地工作。在</p>
<p>我愿意接受任何其他建议,但这是我接受的答案。我希望这能帮助其他人度过同样的困境。在</p>