2010-02-16 101 views
0

我有一个网址http://domain.com/module/controller/action/get1/value1/?get2=value2&get3=value3我想使用Mod_Rewrite将?&=更改为适当的/斜杠,与第一个GET变量内联。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] 
+0

你能澄清一下你想要转换网址的方式吗?用户输入的传入网址是否有斜杠或经典格式? – 2010-02-16 13:06:17

回答

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)); 

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

0

如果你不需要他们的母语$_GET容器中的GET参数,你可以离开htaccess文件原样,并有前端控制器(我假设你使用PHP)做解析,而不是mod_rewrite。

你必须访问$_SERVER["REQUEST_URI"]和任何其他URL解析(我想你正在使用Zend框架)之前,解析出参数踢英寸

这只是工作,如果你可以修改的部分你程序需要value1value2value3等。如果它是某个需要参数的Zend组件,并且该组件直接从$_GET中获取它们,那么这对您不适用,您可能实际上必须构建mod_rewrite指令。

顺便说一句,你知道通过依照你的.htaccess的方法,无效链​​接,图像,CSS文件和其它媒体类型都将被路由到zend.php的方式吗?

+0

我需要在Mod_Rewrite中完成它,因为我使用了很多内置的函数来重写url,因为假设GET params不是?&= ...此外,我的应用程序正常处理正确的HTTP代码链接... – Simon 2010-02-16 14:24:36

0

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

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

这不是错误的方式吗?我认为他希望不匹配的URL为/ get1/value1/....并将其转换为内部的GET参数。 – 2010-02-16 10:10:52