Как я могу добавить .html ко всем моим URL-адресам в cakephp? - PullRequest
5 голосов
/ 05 августа 2010

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

Ответы [ 7 ]

12 голосов
/ 05 августа 2010

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

ОБНОВЛЕНИЕ: 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')
);
5 голосов
/ 05 августа 2010

Одним из параметров, которые вы можете отправить в 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 (), чтобы добавить его по умолчанию.

2 голосов
/ 14 июня 2012

Как Конфигурация маршрутов - Расширения файлов В разделе документации сказано, что вы можете использовать:

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

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

2 голосов
/ 28 августа 2010

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

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

и в действии отображения удалили расширение .html и отобразили соответствующий вид:

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

При вызове страниц добавлено ext для .html

2 голосов
/ 05 августа 2010

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

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

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

0 голосов
/ 16 октября 2015

Это довольно просто, откройте файл app / config / rout.php и просто добавьте

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

Над строкой

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

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

Надеюсь, это поможет.

0 голосов
/ 05 августа 2010

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

...