Категории

  • Голосование
  • Право голоса
  • Киев
  • Украина
  • Здоровье
  • Популярное
  • Новости
  • Новости

      Artmisto
      Наша команда-партнер Artmisto. С "Buddy.Bet" азартные игроки найдут идеальное место для развлечений и возможность выиграть крупные суммы.

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

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

    Наша команда-партнер Artmisto

    В этом руководстве представлены некоторые сведения о конфигурации 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.

    &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 "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 скоро появится.

    связанные с

    Lt;?

    Номера

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

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