Как я могу добавить .html ко всем моим URL-адресам в cakephp?

Я использую cakephp в одном из моих проектов, и мой клиент хочет, чтобы URL-адреса сайта заканчивались на .html, а не на обычные дружественные URL-адреса. Мне было интересно, возможно ли это сделать в cakephp с помощью любого из своих методов маршрутизации. Пожалуйста помоги.

Это хорошо документировано в кулинарной книге .

ОБНОВЛЕНИЕ: http://book.cakephp.org/2.0/en/development/routing.html#file-extensions

Чтобы обрабатывать различные расширения файлов с помощью ваших маршрутов, вам нужна одна дополнительная строка в файле конфигурации маршрутов:

Router::parseExtensions('html', 'rss'); 

Если вы хотите создать URL-адрес, такой как /page/title-of-page.html, вы создадите свой маршрут, как показано ниже:

 Router::connect( '/page/:title', array('controller' => 'pages', 'action' => 'view'), array( 'pass' => array('title') ) ); 

Затем для создания ссылок, которые вернутся к маршрутам, просто используйте:

 $this->Html->link( 'Link title', array('controller' => 'pages', 'action' => 'view', 'title' => 'super-article', 'ext' => 'html') ); 

Один из параметров, которые вы можете отправить в Router :: url () (который вызывается другими методами, такими как HtmlHelper :: link () и Controller :: redirect ()), является «ext». Попробуйте установить его в 'html'. Например:

 echo $this->Html->link('Products', array('controller' => 'products', 'action' => 'index', 'ext' => 'html')); 

или

 $this->redirect(array('controller' => 'products', 'action' => 'index', 'ext' => 'html')); 

Если это работает, попробуйте выяснить, как вы можете переопределить Router :: url (), чтобы добавить его по умолчанию.

Должен был решить это без использования маршрутов. Сохранена запись маршрута по умолчанию для страниц:

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

и в действии на экране было удалено расширение .html и отображено соответствующее представление:

 preg_replace('/\.html$/','',$view); $this->render(null,'default',$view); 

При вызове добавленных страниц 'ext' должен быть .html

Согласно этой странице вы можете сделать что-то вроде этого

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

но поскольку вы говорите о расширениях, это может иметь другие последствия.

Как говорится в разделе « Настройка маршрутов» – в разделе « Расширения файлов », вы можете использовать:

 Router::parseExtensions('html', 'rss'); 

Это скажет маршрутизатору удалить любые соответствующие расширения файлов, а затем проанализировать, что осталось.

Вам также необходимо связать расширение html с модулем PHP в Apache. Я не помню точно, какая настройка нужна, но она будет в файле /etc/httpd/httpd.conf. (Этот файл может быть в несколько другом месте в зависимости от ОС вашего сервера.) Просто найдите строку, которая связывает .php с модулем PHP. Я считаю, что вы также можете определить это в файле .htaccess, но погода или нет, зависит от того, что вам разрешено делать в файле httpd.conf.

Его довольно простой, открыть файл app / config / routes.php и просто добавить

 Router::parseExtensions('html', 'rss'); 

Над линией

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

Теперь вы можете получить доступ даже к вашим методам контроллера с расширением .html.

Я надеюсь, что это помогает .