我在 .htaccess 中设置了 2 个规则
RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ page.php?name=$1&do=$2&newstitle=$3 [L]
RewriteRule ^([^/]*)/([^/]*)/([^/]*)\.html$ page.php?name=$1&do=$2&cattitle=$3 [L]
这就是我调用 url 的方式:
www.domain.com/My-Page/news/News-Title.html
www.domain.com/My-Page/category/Category-Title.html
并且没有 mod 重写:
www.domain.com/page.php?name=My-Page&do=news&newstitle=News-Title
www.domain.com/page.php?name=My-Page&do=category&cattitle=Category-Title
现在的问题是因为两条规则很相似,所以无论如何它总是恢复到第一条规则。如果我删除第一条规则,第二个 url 工作正常,但对于它们两个,它总是只重写第一条规则。
如何在两个规则都有效的情况下实现这一目标。我知道我遗漏了一些东西,但我在 mod_rewrite 方面的专业知识有限。
非常感谢任何帮助。
最佳答案
这两个规则并不相似,它们是相同的,所以它总是执行第一个规则。
如果我要这样做(我真的不会,主要是因为我觉得这是一个更好地留给 MVC 模式中的工厂的工作),我可能会这样说:
RewriteRule ^([^/]*)/news/([^/]*)\.html$ page.php?name=$1&do=news&newstitle=$2 [L]
RewriteRule ^([^/]*)/category/([^/]*)\.html$ page.php?name=$1&do=category&cattitle=$2 [L]
您需要一些方法来区分它们。这应该非常简单。
编辑
只是指出,你可以写这些:
RewriteRule ^(.+)/news/(.+)\.html$ page.php?name=$1&do=news&newstitle=$2 [L]
我添加的偏好是删除 .html:
RewriteRule ^(.+)/news/(.+)$ page.php?name=$1&do=news&newstitle=$2 [L]
我不喜欢公开任何形式的服务器技术,而且 HTML 不会添加任何我们还不知道的站点信息。
就我个人而言,我使用类似的系统:
RewriteRule ^(.*)$ index.php?page=$1 [L,QSA]
URL 被 index.php 分解成如下格式:
http://www.example.com/<controller>/<arg1>/<arg2>
这样,通过一个重写语句,我告诉它去哪里,然后 Controller 返回适当的输出。之后我再也不需要更新 .htaccess 了。如果我需要新功能,我会编写一个新 Controller 。只是需要研究的东西。
关于mod-rewrite - Apache 模组重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7250717/
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
更新:当输入“passenger-memory-stats”时,我显示:---Passengerprocesses---Processes:0我该如何解决这个问题?为什么即使我在httpd.conf中添加它并重新启动apache,passenger也不会启动?我无法让PhusionPassenger在服务器上运行RubyonRails。我已经按照Phusion网站上的所有说明安装了passenger并修改并创建了ApacheVirtualHost以指向新目录并验证所有.conf文件都已成功加载。还加载了httpd-Mpassenger_module。我还在本地主机上成功运行了Passe
是否可以重写基本URL?例如而不是www.host.com/使用www.host.com/blah/作为一个基本的url等等:get'/'do...end适用于www.host.com/blah/我可以附加到我的所有路线'/blah/..'但任何gem等。也将无法工作。这可以在Rails中轻松完成,我也想在Sinatra中使用它。 最佳答案 我为此使用了Rack中间件rack-rewrite我对此很满意:)useRack::Rewritedorewrite%r{^/\w{2}/utils},'/utils'rewrite%r{^/\
我有一个要在IRB中运行的小程序。它最终输出一些看起来像数组的东西,尽管从技术上讲不是数组。(该类继承自数组。)问题是,当我执行此类的实例时,例如example=Awesome.new(1,2,3),我写了“putsexample”,IRB的默认行为是将example的每个元素放在它自己的行上。所以代替[1,2,3](这是我想要的),IRB弹出这个。123有没有一种巧妙的方法来覆盖这个特殊类的puts方法?我试过了,但没用。defputsself.to_aend知道我做错了什么吗?更新:所以我尝试了这个,但没有成功。defto_sreturnselfend所以当我在IRB中并且我只输入
我的带有apache+passenger的Rails应用程序一开始工作得很好。但是,运行一段时间后,遇到如下错误:Theapplicationspawnerserverexitedunexpectedly:Unexpectedend-of-filedetected.我查看了apache的错误日志,发现了这个错误:../gems/passenger-3.0.7/lib/phusion_passenger/utils.rb:716:[BUG]Segmentationfault似乎乘客有内存问题。有人可以帮忙吗?谢谢。 最佳答案 最可能的
虽然我们可以用webrick或mongrel部署它 最佳答案 大多数Ruby应用程序服务器只会运行一个Ruby进程(Ruby有一个全局解释器锁,这使得多线程变得毫无意义),这意味着它一次只能处理一个请求。至少可以说,这不会给你很好的表现。有两种解决方法:运行多个Ruby应用程序服务器并在它们前面放置一个负载平衡器或反向代理,例如Nginx或Apache在一堆Mongrels或瘦服务器前面(您运行的进程数反射(reflect)了您将能够并行处理的请求数)。或者你运行Passenger,它是一个Apache或Nginx模块,管理一个应用
如果这听起来像一个愚蠢的问题,我很抱歉,因为它似乎是那些“不该”的事情之一,但是有人可以向我解释为什么Rails需要它自己的服务器(Mongrel、WEBrick、mod_rails等)不能简单地使用mod_ruby吗? 最佳答案 所有运行mod_ruby的apache实例共享一个Ruby解释器。这意味着它根本不能在共享主机上使用,也不能在每台机器上运行多个Rails应用程序的任何环境中使用。在一台机器上运行同一应用程序的多个副本是可能的,但您也可能很容易遇到难以追踪错误的情况。因为Rails是单线程的,所以每台机器只运行一个rub
我不知道正确的术语。我试图用谷歌搜索它,但由于这个原因找不到任何东西。我正在编写一个Ruby库,我想重写这些函数,以便它们像下面那样工作,因为我更喜欢它的可读性(在一个block内?)我有一个函数可以做到这一点@dwg=Dwg.new("test.dwg")@dwg.line([0,0,0],[1,1,0])@dwg.save我想重写它,让它像这样工作Dwg.new("test.dwg")doline([0,0,0],[1,1,0])saveend你能概述一下我处理这件事的方法吗? 最佳答案 您可以定义Dwg的初始化程序来获取一个b
我对这个架构有点困惑。在我正在进行的一个项目中,Unicorn被选为Rails服务器。它放在Nginx网络服务器后面。据我了解,Unicorn是功能齐全的Web服务器,我们不打算在同一服务器实例上托管任何其他Rails应用程序。所以我的问题是:在链中添加附加层有什么好处:client->nginx->unicorn->unicornworker 最佳答案 Unicorn不是为处理“慢客户端”而设计的。您可以在PHILOSOPHY中阅读更多相关信息帮助文件:Mostbenchmarkswe’veseendon’ttellyouthis
我正尝试着手编写一些RubyonRails应用程序并在Mongrel上取得了成功,但是,我想将我的应用程序部署到Windows上的Apache2.2实例吗?我发现的所有教程似乎都已过时,并且适用于旧版本的Apache/Rails。有人知道为RubyonRails应用程序配置Apache2.2的最新好教程吗? 最佳答案 编辑:至少在Win出现PhusionPassenger之前,Apache+Mongrel是可行的方法。您可以在没有Mongrel的情况下使用Apache+FastCGI,但在实际负载下您会遇到(更多)僵尸进程和(更多)