cakephp路由检索从url到重定向的参数

时间:2013-08-08 06:09:39

标签: cakephp routes

我正在使用cakephp v2.3.8并且在路由方面有点挣扎。

旧网址是www.domain.com/properties.aspx?prop=1999
我想将此路由到id = 1999的属性控制器,所以我的URL将如下所示: www.domain.com/properties/view/1999

在我的routes.php中,我将.aspx从网址中剥离出来,但最后一点却很费劲。

Router::parseExtensions('htm','html','aspx');

这就是我的亲密程度:

Router::connect('/properties', array('controller' => 'properties', 'action' => 'view', ??? '));

这是PropertiesController.php中的视图函数

public function view($id = null) {
    if (!$this->Property->exists($id)) {
        throw new NotFoundException(__('Sorry, we couldn\'t find what you were looking for...'));
    }
    $options = array('conditions' => array('Property.' . $this->Property->primaryKey => $id));
    $propData = $this->Property->find('first', $options);
            $this->set('property', $propData);
}

这在网站上运作得很完美,但不适用于那些,它们被重定向到www.domain.com/properties

这是我在public_html文件夹中的.htaccess文件。

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

感谢您对此进行调查。

文件结构:

.htaccess [1]  
/app/.htaccess [2]  
/lib/Cake/  
/public_html/.htaccess [3]    
/plugins/  
/vendors/  

[1]

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule    ^$ app/webroot/    [L]
RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>

[2]

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule    ^$    webroot/    [L]
RewriteRule    (.*) webroot/$1    [L]
</IfModule>

[3]

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]

/public_html/index.php

if (!defined('ROOT')) {
define('ROOT', DS.'home'.DS. 'user');
}

/**
* The actual directory name for the "app".
*
*/
if (!defined('APP_DIR')) {
define('APP_DIR', 'app');
}  

3 个答案:

答案 0 :(得分:2)

Nick我认为这是由于.htaccess文件引起的问题

你在public_html中设置了cakephp,但我认为你已经替换了cakephp的.htaccess文件,其中包含如下代码:

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>

将此.htaccess文件放在app文件夹的外侧,表示在publich_html文件夹中

答案 1 :(得分:1)

您可以使用以下内容:

Router::connect('properties/view/:id',
array('controller' => 'properties', 'action' => 'view'),
  array(
      'pass' => array('id')
  )
);

然后,将'id'作为参数

传递给'properties'控制器内的'view'函数

答案 2 :(得分:0)

转到

Router::connect('/Properties/*',array('controller' => 'Properties', 'action' => 'view'),array('id' => '[0-9]+'));