【问题标题】:Silverstripe 3.1: Default Controller/RouteSilverstripe 3.1:默认控制器/路由
【发布时间】:2014-09-20 23:44:42
【问题描述】:

我想为 Silverstripe 添加一条默认路由。目前,我的应用程序中有一些路由,分别是/dev、/admin 和/api。我希望所有其他不在(虚拟)子目录中的流量由单独的控制器处理。

我一直在玩 YAML 配置系统,但我似乎无法理解它。

所以基本上我想做以下事情

  • /dev -> 基本的 SS 功能,应该做它该做的 :-)
  • /admin -> cms 模块
  • /api -> Restful api 模块,

但其他所有路径都应指向 MyOwnController。

  • /asdfsdfsd -> MyOwnController
  • /23-asdf -> MyOwnController 等

/asda/asd 也不必重新路由到 MyOwnController。

我制作了一个 /mysite/_config/routes.yml 文件,其中包含以下内容:

---
Name: myroutes
After: 'framework/routes#coreroutes'
---
Director:
  rules:
    '$Path': 'MyOwnController'

这会破坏网站(仅 404)。这个应该怎么设置?我可以开始摆弄 _config.php,但我宁愿遵守标准 :-)

【问题讨论】:

  • 您不需要在路径前加上 $ - 所以 'somepath': 'MyController' 应该可以工作。另外,您在进行更改后是否运行了 /dev/build?flush=1 ?这是一个普通的叮当声!
  • "somepath: MyController" 只会将 www.mysite.com/somepath 的所有流量路由到控制器。我希望“somepath”是任意的。就像twitter.com/username,其中“用户名”可以是任何你想要的。是的,我脸红了。

标签: url-routing yaml silverstripe


【解决方案1】:

通过 .hataccess 来实现呢?类似于以下内容(未测试):

RewriteEngine on
RewriteCond %{REQUEST_URI} !^/admin/
RewriteCond %{REQUEST_URI} !^/dev/
RewriteCond %{REQUEST_URI} !^/api/
RewriteCond %{REQUEST_URI} !^/your/default/route
RewriteCond %{REQUEST_URI} !^/framework
RewriteCond %{REQUEST_URI} !^/assets
RewriteCond %{REQUEST_URI} !^/Security
RewriteCond %{REQUEST_URI} !^/themes
RewriteCond %{REQUEST_URI} !^/cms
RewriteRule (.*) http://www.yourdomain.com/your/default/route/$1 [L]

【讨论】:

  • 好主意!但是,如果我稍后决定向该站点添加页面,那将会破坏事情。它还会引入一个额外的 301/302 重定向,我想避免。但绝对是一个要记住的选项......现在我想把东西放在 Silverstripe 里面。
  • 我在玩弄你的答案,它有效,但我必须添加一些规则来防止重定向循环。另外,我希望资产目录不要被重写。但我仍然想要一个原生 SS 解决方案 :-)
  • 我手动添加了你的 RewriteCond,现在我的 .htaccess 规则似乎更正确了。无论如何,我不认为通过这个解决方案我们引入了额外的 301/302 重定向,因为我们没有在 RewriteRule 中使用 R=301 选项,这取决于 apache 为原始浏览器请求提供不同的页面。跨度>
  • 啊,是的,关于额外的 301,你是对的。如果有人提出圣杯,我会等一天左右,否则我会接受你的回答。再次感谢。
  • Aaaand... 添加了另一条应排除的路线。
【解决方案2】:

我已从 CMS ModelAsController 路由中对此进行了改编,应该可以使用,但未经测试。

---
Name: myroutes
Before: '*'
After: '#rootroutes'
---
Director:
  rules:
    '$Path//$Action/$ID/$OtherID': 'MyOwnController'

https://github.com/silverstripe/silverstripe-cms/blob/3.1/_config%2Froutes.yml

记得flush=1。

【讨论】:

  • 感谢您的回答。不幸的是,这不起作用。我收到以下错误:致命错误:根据它们的前后规则,两个片段都需要在...中彼此之前/之后
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
相关资源
最近更新 更多