我目前正在框架上创建 CMS。我已经制作了我的 .htaccess 文件,它看起来像这样:
<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/ {the-shorttag-of-the-page}
2) 我的页面也可以通过路由访问: http://example.com/p/ {the-shorttag-of-the-page}
我真正需要实现的是我可以通过两种方式访问它: http://example.com/ {the-shorttag-of-the-page} 或者有语言支持 http://example.com/ {lang}/{the-shorttag-of-the-page}
我的问题是我不想更改 mod_rewrite - 我更想在 PHP 中创建路由,但我无法找到如何路由到 PageController->view() 方法的解决方案条件中的静态字母(上例中的“p”)。
你明白我的问题了吗? 你有什么提示可以引导我朝着正确的方向前进吗?
最佳答案
这听起来像是您需要实现某种路由器。
我自己遇到过,这就是我如何让它工作得很好:
一些路由器类解析 URL。它将 URL 部分 (/en/controller/action/param1/paramval1/) 分解成片段。它确定语言代码(如果未提供则默认)、 Controller 、操作等。
路由器还向系统的其他部分提供信息( Controller 、 Action 名称、参数),尽管您可以为此目的实现特殊类(例如请求)。
现在系统的不同部分可以通过 Router 或 Request 类访问给定的信息。从这里开始,实现多语言站点应该很容易。
再次强调,重要的部分是将 URL 映射到 Controller 和操作。当然,如果您不想要像 /controller/action/parameter1 这样的 URL,您应该有一些映射表(XML 文档/数据库表)将 stub (页面短标记)映射到 Controller 和操作.路由器读取这个表并根据给定的规则确定 Controller 、 Action 和其他参数。
希望我没有把事情复杂化太多:)
更新:
至于我自己,我已经使用 XML 文件实现了映射。让我进一步解释一下:路由器负责解析 URL。通常,您的 URL 会包含 Controller 和操作名称(在您的例子中,pages 是 Controller ,view 是操作)。
现在在您的情况下,您只需要一个 stub ,因此路由器必须以某种方式获取有关正在调用哪个 Controller 和操作的信息。这就是映射的目的,将 stub 映射到适当的 Controller 和操作。
我将其实现为静态路由,手动写入 XML 文件,但您可以使用某种插件类来检查 stub 是否确实与页面相关。如果不是,则可能意味着两件事:它是 Controller 或请求无效。
让我进一步谈谈冲突:如果 stub 与任何 Controller 的名称相同,就会发生冲突。您应该使用给定的 stub 呈现页面,还是调用 Controller ?这必须以某种方式解决,也许您可以通过编程方式限制用户拥有包含此类 stub 的页面。
此外,下次您深入研究使用 PHP 进行应用程序开发时,我建议您使用一些著名的 PHP 框架(如果您还没有,当然可以),例如Zend、Kohana 或 CodeIgniter。它们都提供路由器和许多其他组件,使开发应用程序变得更容易、更快和更安全。
关于具有多语言支持的 PHP 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5859197/
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use
我正在使用Rails3.1并在一个论坛上工作。我有一个名为Topic的模型,每个模型都有许多Post。当用户创建新主题时,他们也应该创建第一个Post。但是,我不确定如何以相同的形式执行此操作。这是我的代码:classTopic:destroyaccepts_nested_attributes_for:postsvalidates_presence_of:titleendclassPost...但这似乎不起作用。有什么想法吗?谢谢! 最佳答案 @Pablo的回答似乎有你需要的一切。但更具体地说...首先改变你View中的这一行对此#
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来
Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba