脚本宝典收集整理的这篇文章主要介绍了具有多语言支持的PHP路由,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([A-Za-z]+)/(.*)$index.PHP?url=$1 [PT,L] </IfModule>
我的问题是:
1)可以使用普通的MVC URL访问我的页面:
http://example.com/pages/view/ {的-shorttag的最页}
2)我的页面也可以通过路线访问:
http://example.com/p/ {的-shorttag的最页}
我真正需要实现的是我可以通过两种方式访问它:
http://example.com/ {的-shorttag的最页}
或者语言支持
http://example.com/ {语言} / {在-shorttag的最页}
我的问题是我不想更改mod_rewrite – 我更想在PHP中创建路由,但是我找不到如何在没有静态的情况下路由到PageController-> view()方法的解决方案条件中的字母(上例中的“p”).
你明白我的问题吗?
你有一些提示,这可能会让我朝着正确的方向前进吗?
我亲自面对它,这就是我使它工作得很好的方式:
某些路由器类解析URL.它将URL部分(/ en / controller / action / param1 / paramval1 /)分解为多个部分.它确定语言代码(如果未提供,则为默认值),控制器,操作等.
路由器还向系统的其他部分提供信息(控制器,动作名称,参数),尽管您可以为此目的实现特殊类(例如,请求).
现在系统的不同部分可以通过Router或Request类访问给定的信息.从这里开始,应该很容易实现多语言网站.
再一次,重要的部分是将URL映射到控制器和操作.当然,如果你不想像/ controller / action / parameter1这样的URL,你应该有一些映射表(XML文档/数据库表),它将存根(页面短标记)映射到控制器和动作.路由器读取此表并根据给定规则确定控制器,操作和其他参数.
希望我没有太多复杂:)
更新:
至于我自己,我已经用XML文件实现了映射.让我进一步解释一下:路由器负责解析URL.通常,您的URL将包含控制器和操作名称(在您的情况下,页面是控制器,视图是操作).
现在,在您的情况下,您只需要一个存根,因此路由器必须以某种方式获取有关正在调用哪个控制器和操作的信息.这是映射的目的,将存根映射到适当的控制器和操作.
我已将其实现为静态路由,手动编写到XML文件中,但您可以使用某种插件类来检查存根是否实际与页面相关.如果没有,那可能意味着两件事:它是控制器或请求无效.
让我进一步讨论冲突:如果存根与任何控制器的名称相同,则会发生冲突.您是否应该使用给定存根渲染页面,或者调用控制器?这必须以某种方式解决,也许您可以以编程方式限制用户拥有具有这种存根的页面.
此外,下次您使用PHP深入了解应用程序开发时,我建议您使用一些众所周知的PHP框架(如果您还没有使用,那么),例如,Zend,Kohana或CodeIgniter.它们都提供路由器和许多其他组件,使开发应用程序更容易,更快速,更安全.
以上是脚本宝典为你收集整理的具有多语言支持的PHP路由全部内容,希望文章能够帮你解决具有多语言支持的PHP路由所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。