我正在使用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');
}
答案 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]+'));