Mod_Rewrite将GET值对更改为漂亮的斜杠

时间:2010-02-16 09:59:15

标签: .htaccess mod-rewrite

我有一个网址http://domain.com/module/controller/action/get1/value1/?get2=value2&get3=value3我想使用Mod_Rewrite将?&=更改为与第一个/变量内联的适当GET斜杠。

我还需要避免与我当前的Mod_Rewrite规则发生冲突:

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 个答案:

答案 0 :(得分:0)

如果你的本地$_GET容器中不需要GET参数,你可以按原样保留htaccess文件,并让前端控制器(我假设你使用的是PHP)进行解析而不是mod_rewrite 。

您必须访问$_SERVER["REQUEST_URI"]并在任何其他网址解析之前解析参数(我认为您使用的是Zend Frameworks)。

仅当您可以修改需要value1 value2 value3等的程序部分时才有效。如果是某个Zend组件需要参数,那么该组件直接获取它们来自$_GET,这对您不起作用,实际上您可能需要制作mod_rewrite说明。

顺便说一句,您知道通过.htaccess中的方法,图像,CSS文件和其他媒体类型的无效链接都会被路由到zend.php吗?

答案 1 :(得分:0)

尝试将这些规则放在你的面前:

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

答案 2 :(得分:0)

我找不到一个很好的方法来做到这一点...所以我决定在zend.php的顶部编写一些最小化的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));

如果有人可以改进,请在下面发表评论。