2010-02-11 7 views
0

현재 URL에 일반 <form method="get"> 요소를 제출하고 있습니다 ... 검색 페이지의 일부입니다. 결과 url은 아래에 있습니다. 내가 그것을 사용할 때마다, 그것은 ...
/$_GET PARAMS 인하를 단행 유지하고 ?&= 값 쌍을 푼다 ...
http://domain.com/module/controller/action/get1/value1/?get2=get2&value3=value3
문제는 내가 주위를 탐색 할 수 <?= $this->url(array('page' => x)); ?> 및 이와 유사한을 사용하고 있지만 나는 $_GET PARAMS을 유지하려면 내가 슬래시로 값 쌍을 변경하는 mod_rewrite를 사용하려는 ... 나의 현재 규칙은 ..Zend_Router ... Zend_Form ... Mod_Rewrite ... URL을 다시 쓰고 값 쌍을 슬래시로 바꿈

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ zend.php [NC,L] 

나는 mod_rewrite를 자신감 아니에요 나는 기존의 규칙과 충돌하지 않습니다. 나는 또한 뒤에 같은뿐만 아니라 슬래시

는 ... 그래서 ... 보너스 것

도와주세요! 많은 감사합니다 ...

PS ... Re " ... Zend_Form .."제목에. 나는 Zend_Form을 사용하여 양식을 만들고 URL을 쓰려면 onSubmit 함수에서 javascript를 사용할 수 있다는 사실을 깨달으십시오. 마찬가지로 URL을 다시 작성하기 위해 Zend_Router를 사용할 수 있습니다 ... Mod_rewrite이 가장 좋습니다 ...

답변

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

나는 정규 표현식과의 mod_rewrite를 사용하여,이를 구현하는 방법을 알고하지 않습니다,하지만 당신은 다음과 같이 Zend_Controller_Router_Route를 확장하고 그것을 대신 표준 라우터를 사용할 수 있습니다

<?php 
class ZendY_Controller_Router_Route_GetAware extends 
     Zend_Controller_Router_Route 
{ 
    public static function getInstance(Zend_Config $config) 
    { 
     $reqs = ($config->reqs instanceof Zend_Config) 
       ? $config->reqs->toArray() : array(); 
     $defs = ($config->defaults instanceof Zend_Config) 
       ? $config->defaults->toArray() : array(); 
     return new self($config->route, $defs, $reqs); 
    } 

    public function match($path) 
    { 
     foreach ($_GET as $k => $v) { 
      if (is_array($v)) { 
       $v = implode(',', $v); 
      } 
      $path .= "{$this->_urlDelimiter}{$k}{$this->_urlDelimiter}{$v}"; 
     } 
     parent::match($path); 
    } 
} 
관련 문제