2013-06-25 33 views
2

我试图取代像是否可以使用Route :: Connect路由到查询字符串参数?

mysite.com/uploads:27 

一个URL到 mysite.com/uploads/upload?upload=27

我原来的计划是使用.htaccess文件是这样的:

RewriteRule ^upload:(.+) /uploads/upload?upload=$1 [L]

然而,我发现这不是蛋糕有几个.htaccess文件的最好主意。无论如何,这个规则并没有奏效。

所以我去看蛋糕的路线。但是,我似乎无法弄清楚如何路由到一个URL查询字符串参数。

我想:

Router::connect('/upload::upload', 
    array('controller' => 'uploads', 
      'action' => 'upload', 
    '?' => array('upload' => '23') 
     ) 
    ); 

不过,我不认为路由器连接::意在以这种方式工作。没有查询字符串数据被传递给上传控制器。鉴于我在文档中读到的内容,我没有想到这会起作用。

http://book.cakephp.org/2.0/en/development/routing.html “路由是一种将URL映射到控制器操作的功能” - 我猜这意味着查询字符串params不适用于这种情况。

那么有什么办法可以让我按照我想要使用.htaccess的方式行事吗? 我很惊讶没有办法做到这一点,因为使用.htaccess缩短查询字符串是一项常见任务。

像本教程显示:http://www.elated.com/articles/mod-rewrite-tutorial-for-absolute-beginners/ 或apcahe文档: http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

NB:我清楚地知道,URL映射我想(尤其是上传:27的语法与冒号)是对蛋糕公约。我的应用程序未配置为像mysite.com/uploads/upload/27这样的文档,因为文档建议我应该这样做。我更想知道如何按照我在第一个地方想象的方式来做到这一点。

+0

你们是不是要在内部仅此映射,即URL实际上不应该改变,或将重定向被罚款吗? – ndm

+0

重定向也可以。我只是希望用户能够输入所需的链接来获取他们的模型。 – baordog

回答

0

如果一个重定向是确定的,那么这应该这样做:

RewriteRule ^upload:(\d+)$ /uploads/upload?upload=$1 [R=302,L] 

使用.htaccess文件位于app/webroot/,你应该是好的。看到这个例子:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteCond %{REQUEST_FILENAME} -d [OR] 
    RewriteCond %{REQUEST_FILENAME} -f 
    RewriteRule .* - [S=2] 
    RewriteRule ^upload:(\d+)$ /uploads/upload?upload=$1 [R=302,L] 
    RewriteRule ^(.*)$ index.php [QSA,L] 
</IfModule> 

这是原来的.htaccess文件,修改,使重写条件(即检查请求的目标是否是一个实际存在的文件或文件夹)申请最后两个重写规则。在条件成立的情况下,这可以跳过最后两条规则([S=2])。

又见Multiple RewriteRules for single RewriteCond in .htaccess

相关问题