Cakephp 2.3:URL重写不起作用

时间:2014-06-05 07:41:55

标签: .htaccess cakephp

我们刚从一个网络服务器转移到另一个网络服务器 我有一个简单的静态网站,并使用此方法重写网址:

default.thtml中

<?=$this->Html->link(__('Imprint'), array('controller' => 'pages', 'action' => 'imprint'));?>

routes.php文件

Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
Router::connect('/imprint', array('controller' => 'pages', 'action' => 'display', 'imprint'));

在旧的网络服务器上,该链接显示为:domain.com/imprint

在新服务器上显示为domain.com/pages/imprint

该页面正常运行,根本没有断开的链接。 我已经设置了&#34; RewriteBase /&#34;在htaccess文件中。

如何让网址重写恢复正常? 我目前不知道错误是什么,因为我移动了另一个蛋糕项目,也是一个静态项目,并且链接从一开始就很好用。我不知道,为什么这个项目不同,我比较了htaccess文件,核心,路线......我真的不能看到这个问题......

2 个答案:

答案 0 :(得分:3)

我不知道这可能与服务器有什么关系,以及您的URL数组如何匹配这些路径。

订单重要

<强> http://book.cakephp.org/2.0/en/development/routing.html#routes-configuration

路由从&#34; 从上到下&#34;进行处理,因此您必须确保特定路由在通用路由之前是

在您的情况下,/pages/*路线优先,它会像您的/imprint一样吞下每一个后续路线。

因此,请更改订单,将/imprint放在/pages/*之前:

Router::connect('/imprint', array('controller' => 'pages', 'action' => 'display', 'imprint'));
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));

反向路由

您用于生成链接的网址数组看起来不像任何路线。它既未指定display操作,也未指定页面名称参数。

生成链接时,请使用@kicaj

所示的正确URL数组
array('controller' => 'pages', 'action' => 'display', 'imprint')

答案 1 :(得分:0)

使用:

$this->Html->link(__('Imprint'), array('controller' => 'pages', 'action' => 'display', 'imprint'));