SEO дружественные URL в Yii2

  1. Основной шаблон
  2. Скрыть веб-папку
  3. Расширенный шаблон
  4. Ссылки с бэкэнда на фронтэнд
  5. Конечный слеш
  6. Конфигурирование Apache напрямую
  7. Правила

В этом руководстве представлены некоторые сведения о конфигурации Apache и Yii2, чтобы получить удобные для пользователя и дружественные для поисковых систем URL-адреса для вашего веб-приложения.

Основной шаблон

Официальный Yii2 документация есть страница о конфигурации Shared Hosting, которая предоставляет пример того, как вы можете настроить Apache для SEO-дружественных URL-адресов, используя файл .htaccess.

Options + FollowSymLinks IndexIgnore * / * RewriteEngine для #, если каталог или файл существует, использовать его напрямую. RewriteCond% {REQUEST_FILENAME}! -F RewriteCond% {REQUEST_FILENAME}! -D #, иначе перенаправить его в index.php RewriteRule. index.php

После этого вам нужно настроить urlManager в вашем файле config / web.php.

$ config = [// ... 'component' => ['urlManager' => ['class' => 'yii \ web \ UrlManager', 'showScriptName' => false, 'enablePrettyUrl' => true,], // ...

Если ваше приложение находится в корневой папке, маршруты будут выглядеть примерно так: http://yourdomain.com/web/site/index, в противном случае, если ваше приложение Yii2 находится в подпапке, оно может выглядеть следующим образом : http: // yourdomain .com / app / web / site / index .

Скрыть веб-папку

Вы можете избавиться от веб- части URL-адреса, переместив все файлы из веб-папки в корневую папку ваших приложений и изменив пути в index.php, но этот метод смешает содержимое папки / assets / и / Сеть / активы / папка. Вот почему это решение лучше подходит для расширенного шаблона приложения, если только вы не захотите переместить весь свой код вместе с папкой vendors в отдельную папку, как это сделал Yii 1.x.

Лучший способ решить эту проблему - добавить дополнительный файл .htaccess в корневой каталог вашего приложения.

Опции -Indexes RewriteEngine для RewriteRule ^ (. *) $ Web / $ 1 [L]

Обратите внимание, что это будет работать только в том случае, если у вас есть вышеупомянутый файл .htaccess в веб-каталоге. В противном случае запрос попадет во внутренний цикл перенаправления.

Есть много сайтов, которые показывают аналогичные конфигурации, которые являются более сложными. Поскольку мы перенаправляем все запросы в веб-папку, нет необходимости запрещать доступ к файлам, начинающимся с точки, JSON-файлам и т. Д. Базовый шаблон не имеет ни одного из этих файлов в веб-папке. Для расширенного шаблона вы можете запретить доступ к точечным файлам, добавив эти строки.

<Files ~ "(^ \. | \ / \.)"> Порядок разрешить, запретить запрещать все </ Files>

Теперь мы должны сообщить Yii, что наш базовый URL изменился. Мы делаем это, настраивая baseUrl для urlManager и компонент запроса в config / web.php.

$ config = [// ... 'components' => ['urlManager' => ['class' => 'yii \ web \ UrlManager', 'showScriptName' => false, 'enablePrettyUrl' => true, 'baseUrl '=>' / ',],' request '=> [' baseUrl '=>' ', // ...], // ...

Если ваше приложение находится в подпапке, введите имя подпапки в параметр baseUrl 'baseUrl' => '/ app',.

Расширенный шаблон

Мы можем настроить расширенный шаблон аналогично базовому шаблону. Файлы .htaccess в веб-папках будут одинаковыми. Но файл .htaccess для корневой папки будет другим, чтобы разрешать запросы к бэкэнд-приложению.

Опции -Indexes RewriteEngine для #, если запрос не к бэкэнду, направьте его в / frontend / web RewriteCond% {REQUEST_URI}! ^ / Backend RewriteRule ^ (. *) $ / Frontend / web / $ 1 [L] # другой маршрут запрос к бэкэнду RewriteRule ^ backend /(.*)$ backend / web / $ 1 [L]

Эти правила не вызывают цикл перенаправления, поскольку запрос в дальнейшем переписывается правилами в файле .htaccess веб- каталога.

Не забудьте настроить baseUrl для компонента запроса и urlManager.

Ссылки с бэкэнда на фронтэнд

Официальная документация предполагает, что для создания ссылок из внутреннего приложения на приложение внешнего интерфейса и приложение внешнего интерфейса на внутреннее приложение необходимо настроить дополнительный компонент kel urlManagerBac для приложения внешнего интерфейса.

'urlManager' => ['class' => 'yii \ web \ UrlManager', 'baseUrl' => '', 'enablePrettyUrl' => true, 'showScriptName' => false,], 'urlManagerBackend' => [' class '=>' yii \ web \ UrlManager ',' baseUrl '=>' / backend ',' enablePrettyUrl '=> true,' showScriptName '=> false,],

И дополнение urlManagerFrontend для внутреннего приложения.

'urlManager' => ['class' => 'yii \ web \ UrlManager', 'baseUrl' => '/ backend', 'enablePrettyUrl' => true, 'showScriptName' => false,], 'urlManagerFrontend' => ['class' => 'yii \ web \ UrlManager', 'baseUrl' => '', 'enablePrettyUrl' => true, 'showScriptName' => false,],

Затем вы можете использовать их следующим образом: $ frontendUrl = \ Yii :: $ app-> urlManagerFrontend-> createUrl (['site / index']);

Это замечательно, когда у вас нет каких-либо правил URL, в противном случае вам придется не только дублировать все правила, но и менять их в двух местах. Чтобы избежать этого, вы можете сохранить конфигурацию для urlManager в отдельных файлах и загрузить с функцией require.

'urlManager' => require ('urlmanager.php'), 'urlManagerBackend' => require ('../../ backend / config / url-manager.php'),

Для бэкэнда:

'urlManager' => require ('urlmanager.php'), 'urlManagerFrontend' => require ('../../ frontend / config / url-manager.php'),

И вот как вы можете сохранить конфигурацию в ваших файлах url-manager.php.

<? php return ['class' => 'yii \ web \ UrlManager', 'showScriptName' => false, 'enablePrettyUrl' => true,];

Конечный слеш

Если вы когда-либо использовали Зубастик возможно, вы получили уведомление о проблеме с косой чертой.

Вы можете исправить это, добавив эти две строки в ваш файл /web/.htaccess сразу после RewriteEngine :

RewriteCond% {REQUEST_FILENAME}! -D RewriteRule ^ (. *) / $ / $ 1 [L, R = 301]

Конфигурирование Apache напрямую

Файлы .htaccess удобны тем, что вы можете связать их вместе с вашим приложением, а также потому, что вам не нужно перезапускать Apache после изменения чего-либо внутри файла .htaccess, чтобы изменения вступили в силу. Но вы также должны платить производительностью, потому что Apache должен сканировать файлы .htaccess при каждом запросе. Чтобы избежать этого, вы можете настроить Apache из httpd.conf.

Вот пример конфигурации, которую я использовал для VirtualHost на компьютере с Windows.

<VirtualHost *: 80> ServerAdmin webmaster @ mytestapp DocumentRoot "C: \ wamp \ www \ mytestapp \ frontend \ web" ServerName mytestapp ErrorLog "logs / mytestapp-error.log" Журналы CustomLog "/ mytestapp-access.log" общие псевдонимы / admin "C: \ wamp \ www \ mytestapp \ backend \ web" <Каталог "C: \ wamp \ www \ mytestapp \ frontend \ web"> RewriteEngine на RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule. index.php AllowOverride Нет Порядок allow, deny Allow from all </ Directory> <Directory "C: \ wamp \ www \ mytestapp \ backend \ web"> RewriteEngine на RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! - d RewriteRule. index.php AllowOverride Нет Порядок allow, deny Allow from all </ Directory> </ VirtualHost>

Обратите внимание, что в этой конфигурации бэкэнд-приложение доступно через маршрут / admin.

Правила

Теперь, когда у нас есть настройки, мы можем начать улучшать наши URL.

'urlManager' => ['class' => 'yii \ web \ UrlManager', 'baseUrl' => '/', 'enablePrettyUrl' => true, 'showScriptName' => false, 'enableStrictParsing' => true, ' rules '=> [' / '=>' site / index ',' about '=>' site / about ',' contact '=>' site / contact ',' login '=>' site / login ',' logout '=>' site / logout ',' captcha '=>' site / captcha ',' signup '=>' site / signup ',' request-password-reset '=>' site / request-password-reset ' , 'reset-password' => 'site / reset-password',],],

'enableStrictParsing' => true указывает Yii2 разрешать только маршруты, перечисленные в правилах. Вам решать, хотите вы этого или нет.

Учебник по расширенной маршрутизации с помощью urlManager скоро появится.

связанные с

Номера

Номерной фонд гостиницы насчитывает 173 номера различных категорий.

Забронировать отель можно прямо сейчас: Бронирование онлайн