2011-11-18 22 views
0

使用mod_rewrite(和CakePHP):mod_rewrite的變化,原始的URI

RewriteRule ^javascript/(.*) /combine?type=javascript&files=$1 [PT,L] 

我想改變

http://bla.com/javascript/flyout.ribbon.js,jquery.min.js

http://bla.com/combine?type=javascript&files=flyout.ribbon.js,jquery.min.js

的問題是CakePHP的看原始URL(在parseParams()內部)下面)http://bla.com/javascript/並決定我要訪問JavascriptController/JavaScript的,而不是CombineController /組合內Dispatcher.php

public function dispatch(CakeRequest $request, CakeResponse $response, $additionalParams = array()) { 
    if ($this->asset($request->url, $response) || $this->cached($request->here)) { 
     return; 
    } 

    Router::setRequestInfo($request); 
    $request = $this->parseParams($request, $additionalParams); 
..... 
} 

public function parseParams(CakeRequest $request, $additionalParams = array()) { 
    if (count(Router::$routes) == 0) { 
     $namedExpressions = Router::getNamedExpressions(); 
     extract($namedExpressions); 
     $this->_loadRoutes(); 
    } 

    $params = Router::parse($request->url); 
    $request->addParams($params); 
..... 
} 

有沒有什麼辦法可以修改使用mod_rewrite原始URL?通過添加以下(或我只是誤解的東西)

+1

我認爲這是可以在路線PHP來實現,在config文件夾。那裏你可以把如何解析參數/頁面...這是解決你的問題的方法,因爲我不知道如何搞砸.htaccess – api55

回答

0

修改routes.php文件:

Router::connect('/javascript/:filenames/*', 
       array('controller' => 'combine', 'action' => 'combineJs'), 
       array('pass' => array('filenames')));