Я использую 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.
Я надеюсь, что это помогает .