SEO дружніх URL в Yii2
- Основний шаблон
- Приховати веб-папку
- Розширений шаблон
- Посилання зі списку до інтерфейсу
- Закінчена коса риса
- Налаштування Apache безпосередньо
- Правила
Цей підручник надає певну інформацію про конфігурацію 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.
<? 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.