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

mod_rewrite change get value pairs转换成漂亮的斜线

  •  0
  • Simon  · 技术社区  · 14 年前

    我有一个网址 http://domain.com/module/controller/action/get1/value1/?get2=value2&get3=value3 我想用mod重写来更改 ?&= 适当 / 与第一个斜线对齐 GET 变量。

    我还需要避免与我当前的修改规则冲突:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^.*$ zend.php [NC,L]
    
    3 回复  |  直到 14 年前
        1
  •  0
  •   Pekka    14 年前

    如果您不需要在其本机中使用get参数 $_GET 容器,您可以保留htaccess文件,让前控制器(我假设您使用的是php)进行解析,而不是mod ou重写。

    您必须访问 $_SERVER["REQUEST_URI"] 在其他任何URL解析(我认为您使用的是Zend框架)开始之前,先解析出参数。

    只有当您可以修改程序中需要的部分时,这才有效。 value1 value2 value3 等等,如果某个Zend组件需要参数,而该组件直接从 $GET ,这对您不起作用,您实际上可能需要构建 mod_rewrite 指令。

    顺便说一句,您可以通过.htaccess中的方法了解到,指向图像、CSS文件和其他媒体类型的无效链接都将路由到 zend.php ?

        2
  •  0
  •   Gumbo    14 年前

    试着把这些规则摆在你面前:

    RewriteCond %{QUERY_STRING} ^([^&=]+)=([^&]+)&(.+)
    RewriteRule ^ %{REQUEST_URI}%1/%2/?%3 [N]
    RewriteCond %{QUERY_STRING} ^([^&=]+)=([^&]+)$
    RewriteRule ^ %{REQUEST_URI}%1/%2/? [L,R]
    
        3
  •  0
  •   Simon    14 年前

    我找不到一个好方法来做这件事…所以我决定在我的 zend.php .

    list($sURL, $sQuery) = explode('?', $_SERVER['REQUEST_URI']);
    $sOriginalURL = $sURL;
    if ('/' !== substr($sURL, -1)) $sURL .= '/';
    if (isset($sQuery)) {
        foreach (explode('&', $sQuery) as $sPair) {
            if (empty($sPair)) continue;
            list($sKey, $sValue) = explode('=', $sPair);
            $sURL .= $sKey . '/' . $sValue . '/';
        }
    }
    if (isset($sQuery) || $sOriginalURL !== $sURL) header(sprintf('Location: %s', $sURL));
    

    如果有人对此有所改进,请在下面发表评论。