3

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

旧 url 是 www.domain.com/properties.aspx?prop=1999
我想将它路由到 id = 1999 的属性控制器,所以我的 url 看起来像:www.domain.com/properties/view/1999

在我的 routes.php 中,我将 .aspx 从 url 中剥离出来,但最后一点很挣扎。

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');
}  
4

3 回答 3

2

尼克我认为这是由于 .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 文件夹中

于 2013-08-14T04:50:36.417 回答
1

你可以使用这样的东西:

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

然后,此“id”将作为参数传递给“属性”控制器内的“视图”函数

于 2013-08-08T06:14:53.090 回答
0

去做

Router::connect('/Properties/*',array('controller' => 'Properties', 'action' => 'view'),array('id' => '[0-9]+'));
于 2013-08-13T07:37:30.223 回答