代码之家  ›  专栏  ›  技术社区  ›  Nathacof

如何在zend框架中使用mod_rewrite?

  •  2
  • Nathacof  · 技术社区  · 16 年前

    我刚刚使用zend框架部署了一个新站点。由于我的教程很受欢迎,我想将任何教程请求重定向到新站点上的相关页面。到目前为止,这就是我所拥有的:

    重写前的URL: http://neranjara.org/tutorials/?tid=56

    重写后的URL: http://neranjara.org/article/id/56

    我试图使用的.htaccess文件如下所示:

      $ cat html/.htaccess
      RewriteEngine on
    
      RewriteRule tutorials/\?tid=(.*)$ /article/id/$1 [R=301]
      RewriteRule !\.(js|ico|gif|jpg|png|css|xml|phps)$ index.php
    

    但此规则与任何URL都不匹配…“

    有人看到这里有问题吗?

    3 回复  |  直到 15 年前
        1
  •  3
  •   Chris    16 年前

    基于您以前的条目:

      $ cat html/.htaccess
      RewriteEngine on
    
      RewriteRule tutorials/\?tid=(.*)$ /article/id/$1 [R=301]
      RewriteRule !\.(js|ico|gif|jpg|png|css|xml|phps)$ index.php
    

    我建议改用这个:

      $ cat html/.htaccess
      RewriteEngine on
    
      RewriteCond %{QUERY_STRING} ^tid=([^&]*)
      RewriteRule tutorials/ /article/id/%1 [R=301, L]
    
      RewriteRule !\.(js|ico|gif|jpg|png|css|xml|phps)$ index.php [L]
    

    顺便说一下,这只是使用 QUERY_STRING mod_rewrite中的变量。我的选票投给了“lpfavreau”,因为这是他们答案中的选项2。

        2
  •  3
  •   Community datashaman    7 年前

    查询字符串(传递给文件的参数)将不在重写规则中。

    取自 http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewriterule :

    模式将不匹配 针对查询字符串。相反,你 必须将rewritecond与 %{查询字符串}变量。你可以, 但是,在 替换字符串,包含 查询字符串部分。简单使用 替换中的问号 字符串,以指示 文本应重新注入 查询字符串。当你想删除 现有查询字符串,结束 只有一个替换字符串 问号。合并新查询 用一个旧的字符串,使用[qsa] 旗帜。

    这里有两种可能性:

    1. 在继续使用框架之前,请删除第一个重写规则并在index.php中进行验证。初始查询应该在 $_SERVER['REQUEST_URI'] 或者类似的事情。所以核实一下 教程 蒂德 参数,然后继续重定向:

      header("Location: http://http://neranjara.org/article/id/$id");
      exit();
      
    2. 按照apache文档中的说明,将rewritecond与%{query_string}一起使用。这个解决方案以类似于线程的方式讨论 this one .

    //编辑:

    看一看 Chris' answer 他很友好,用查询字符串详细说明了解决方案。这可能是你想用的。谢谢克里斯。

        3
  •  -1
  •   DFectuoso    16 年前

    zend使用htaccess所能提供的所有htaccess功能,因此有一个非常方便(可链接且有趣且没有很好的文档记录)的方法在引导中实现这一点!

    您必须在引导中使用zend路由器(index.php)。可能是这样的:(这里是foo.com/article/23

    路由器$= $frontcontroller->获取路由器();

    新路线=新路线 Zend_控制器_路由器_路由( '文章/:id', 数组('id'=>1));$router->addroute('article',$route);

    更多信息 here