SEO Friendly URL у Yii2

  1. Асноўны шаблон
  2. Схаваць вэб-тэчку
  3. Пашыраны шаблон
  4. Спасылкі ад backend да frontend
  5. Сляпы
  6. Налада Apache напрамую
  7. Правілы

У гэтым кіраўніцтве даецца ўяўленне пра канфігурацыю Apache і канфігурацыю Yii2 для дасягнення зручных URL-адрасоў і пошукавых URL-адрасоў для вашага вэб-прыкладання.

Асноўны шаблон

Yii2 афіцыйны дакументацыя У ёй ёсць старонка пра канфігурацыю агульнага хостынгу, у якой прадстаўлены прыклад таго, як можна наладзіць Apache для SEO-дружалюбных URL-адрасоў з дапамогай файла .htaccess.

Параметры + 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 \ web \ UrlManager', 'showScriptName' => false, 'enablePrettyUrl' => true,], // ...

Калі ваша прыкладанне знаходзіцца ў каранёвай тэчцы, маршруты будуць выглядаць наступным чынам: http://yourdomain.com/web/site/index, у адваротным выпадку, калі ваша прыкладанне Yii2 знаходзіцца ў падтэчцы, яны могуць выглядаць так : http: // yourdomain .com / app / web / site / index .

Схаваць вэб-тэчку

Вы можаце пазбавіцца ад вэб- часткі URL, перамясціўшы ўсе файлы з вэб-тэчкі ў каранёвую тэчку прыкладанняў і змяніўшы шляху ў index.php, але гэты метад змешвае змесціва / актываў / тэчкі і / Інтэрнэт / актывы / тэчка. Таму гэтае рашэнне лепш падыходзіць для пашыранага шаблона прыкладання, калі вы не хочаце перамясціць увесь код разам з тэчкай пастаўшчыкоў у асобную тэчку, як гэта зрабіла 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.

Спасылкі ад backend да frontend

Афіцыйная дакументацыя паказвае, што для таго, каб зрабіць спасылкі з прыкладання backend з дадаткам frontend і з прыкладання frontend да прыкладання backend, мы павінны наладзіць дадатковы кампанент kend urlManagerBac для прыкладання frontend.

'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-адрасоў, у адваротным выпадку вам не толькі прыйдзецца дубляваць усе правілы, але і вам прыйдзецца мяняць іх у двух месцах. Каб пазбегнуць гэтага, вы можаце захаваць канфігурацыю для 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 \ 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 "часопісы / mytestapp-error.log" CustomLog "часопісы / mytestapp-access.log" агульныя псеўданімы / адміністратар "C: \ wamp \ www \ mytestapp \ backend \ web" <Directory "C: \ wamp \ www \ mytestapp \ frontend \ web"> RewriteEngine на RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME}! -d RewriteRule. index.php AllowOverride None Order дазваляюць, забараняюць Allow з усіх </Directory> <Directory "C: \ wamp \ www \ mytestapp \ backend \ web"> RewriteEngine на RewriteCond% {REQUEST_FILENAME}! -f RewriteCond% {REQUEST_FILENAME} -! d RewriteRule. index.php AllowOverride None Order дазваляе, забараняюць Allow ад усіх </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 хутка.

роднасны

Lt;?