我有一个网址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]
答案 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));
如果有人可以改进,请在下面发表评论。