SEO дружніх URL в Yii2

  1. Основний шаблон
  2. Приховати веб-папку
  3. Розширений шаблон
  4. Посилання зі списку до інтерфейсу
  5. Закінчена коса риса
  6. Налаштування Apache безпосередньо
  7. Правила

Цей підручник надає певну інформацію про конфігурацію Apache та конфігурацію Yii2 для досягнення зручних для користувача та дружніх до пошукових систем URL-адрес для вашого веб-програми.

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

Yii2 чиновник документації є сторінка про конфігурацію хостингу, що надає приклад того, як можна налаштувати Apache для дружніх URL-адрес, використовуючи файл .htaccess.

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

Після цього вам потрібно налаштувати urlManager у вашому файлі config / web.php.

$ config = [// ... 'components' => ['urlManager' => ['class' => 'yii веб-сервер', 'showScriptName' => false, 'enablePrettyUrl' => true,], // ...

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

Приховати веб-папку

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

Кращий спосіб вирішити цю проблему - додавання додаткового файлу .htaccess до кореня програми.

Параметри -Індекси RewriteEngine на RewriteRule ^ (. *) $ Web / $ 1 [L]

Зверніть увагу, що це буде працювати, лише якщо ви маєте вищезгаданий файл .htaccess у веб-каталозі. В іншому випадку запит потрапить у внутрішній цикл перенаправлення.

Є багато веб-сайтів, які демонструють подібні конфігурації, які є більш складними. Оскільки ми перенаправляємо всі запити до веб-папки, не потрібно забороняти доступ до файлів, які починаються з крапки, файлів JSON та інших. Основний шаблон не містить жодного з цих файлів у веб-папці. Для розширеного шаблону можна заборонити доступ до точкових файлів, додавши ці рядки.

<Файли ~ "(^. |

Тепер ми повинні сказати Yii, що наша базова URL-адреса змінилася. Ми робимо це, налаштувавши baseUrl для urlManager і компонент запиту в config / web.php.

$ config = [// ... 'components' => ['urlManager' => ['class' => 'yii веб-сервер', 'showScriptName' => false, 'enablePrettyUrl' => true, 'baseUrl '=>' / ',],' request '=> [' baseUrl '=>' ', // ...], // ...

Якщо ваша програма знаходиться в підтеці, вкажіть назву підпапки в параметрі baseUrl 'baseUrl' => '/ app',.

Розширений шаблон

Розширений шаблон можна налаштувати аналогічно основному шаблону. Файли .htaccess у веб-папках будуть однаковими. Але файл .htaccess для кореневої папки буде іншим, щоб дозволити запити на додаток бекенда.

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

Ці правила не викликають перенаправлення, оскільки запит переписується правилами у файлі .htaccess веб- каталогу.

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

Посилання зі списку до інтерфейсу

Офіційна документація передбачає, що для того, щоб зробити посилання з додатка бекенда до інтерфейсу, а з інтерфейсу програми на додаток бекенда, ми повинні налаштувати додатковий компонент urlManagerBac kend для програми frontend.

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

Крім того, urlManagerFrontend для додатка backend.

'urlManager' => ['class' => 'yii веб-сервер', 'baseUrl' => '/ backend', 'enablePrettyUrl' => true, 'showScriptName' => false,], 'urlManagerFrontend' => ['class' => 'yii web' UrlManager ',' baseUrl '=>' ',' enablePrettyUrl '=> true,' showScriptName '=> false,],

Тоді ви можете використовувати їх так: $ frontendUrl = Yii :: $ app-> urlManagerFrontend-> createUrl (['site / index']);

Це чудово, коли у вас немає правил URL, інакше не тільки вам доведеться дублювати всі правила, але вам доведеться змінити їх у двох місцях. Щоб уникнути цього, ви можете зберегти конфігурацію для urlManagers в окремих файлах і завантажити з функцією 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.

&lt;? php return ['class' => 'yii веб-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" Ім'я_сервера mytestapp ErrorLog "logs / mytestapp-error.log" CustomLog "logs / 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 Немає дозволу, заборонити Дозволити з усіх </Directory> <Directory "C: wamp www mytestap backend>> RewriteEngine на RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! - d RewriteRule. index.php AllowOverride Немає дозволу, заборонити дозвіл від усіх </Directory> </VirtualHost>

Зауважте, що в цій конфігурації серверний додаток доступний через маршрут / admin.

Правила

Тепер, коли ми отримали конфігурацію, ми можемо почати вдосконалення наших URL-адрес.

'urlManager' => ['class' => 'yii web' UrlManager ',' baseUrl '=>' / ',' enablePrettyUrl '=> true,' showScriptName '=> false,' enableStrictParsing '=> true,' rules '=> [' / '=>' site / index ',' about '=>' site / about ',' contact '=>' сайт / контакт ',' login '=>' сайт / логін ',' logout '=>' site / logout ',' captcha '=>' site / captcha ',' signup '=>' сайт / реєстрація ',' request-password-reset '=>' site / request-password-reset ' , 'reset-password' => 'site / reset-password',],],

'enableStrictParsing' => true, повідомляє Yii2, щоб дозволити лише маршрути, які вказані в правилах. Ви самі вирішите, хочете ви цього чи ні.

Незабаром з'явиться підручник з розширеної маршрутизації з urlManager.

Пов'язані

Lt;?