【发布时间】:2015-02-14 05:08:37
【问题描述】:
我最近一直在提高自己的 Web 编程技能,以遵循更理智、更易于维护的 MVC 编码风格。然而,我曾经用我的“自己动手”框架做的一件事是基于 mod_rewrite 的灵活动态路由。对于像 cakephp、zend 等这样的东西,这似乎是一个令人头疼的问题。它试图复制我拥有的功能,这让我有些头疼。
在您自己的上下文中,您可以执行以下操作:
<custom htaccess rules before>
RewriteRule ^([A-Za-z0-9-/]+)$ index.php?q=$1 [NC,L]
它将所有匹配的 url 重写为处理 url 的任意脚本,将"/abc-123/abc-456/controller-value" 等的组合解析为可以从数据库表中设置的任何页面或操作、函数等列表,硬编码,bla bla。 . 之前的自定义规则可以通过对服务器上资源存在的文件的匹配请求,或者设置管理路由等。
但是,一旦 MVC url 策略开始生效,就很难用对外界隐藏应用程序逻辑的东西来覆盖此行为。我从来没有真正理解为什么有人想要向用户公开函数名称,这是我真正的问题。从可用性和安全性的角度来看,这似乎是不必要的,而且太过分了。
所以 - 问题是,如何在为应用程序保持坚实的 MVC 基础的同时实现重写、可翻译和友好的 url 策略?
要求:
- 没有公开应用逻辑
- 可翻译的网址 (i18n)
- 无需接触应用程序代码即可动态添加、删除、编辑网址或页面
欢乐时光! :D
示例网址:
/en/news/story-title
/pt/noticias/titulo
url 根据传递的语言字符串检索本地化内容的位置。
【问题讨论】:
-
当您说“可翻译的 URL”时,您是指有多个 URL 可以检索完全相同的内容吗?这将导致搜索引擎看到重复的内容。需要注意的事情。
-
翻译后的 url 将检索特定于与该 URL 关联的语言的内容。例如,/en/news /pt/noticias 抱歉,如果不清楚,我认为这是不言而喻的。
标签: php model-view-controller routing url-rewriting internationalization