Yii2. Как убрать web из адреса
20.04.2019
Теги: .htaccess • Apache • FastCGI • php.ini • SEO • URL • Web-разработка • Yii2 • Теория • Фреймворк • ЧПУ
Сразу после установки Yii2 сайт доступен по адресу server.com/web
, поскольку именно в директории web
находится публичная часть приложения. При попытке обратиться к корню сервера, убрав web
из адреса, будет показан листинг корневой папки (если показ листинга не запрещен настройками сервера).
Такой вариант вряд ли кому-то понравится, хотелось бы, чтобы главная страница сайта была доступна при обращении к доменному имени, без добавления туда директории web
. Сделать это достаточно просто. И для этого есть два способа.
Изменяем DocumentRoot
Первый, и самый правильный — изменить корневую директорию в настройках веб-сервера так, чтобы та указывала на web
. У меня PHP установлен как FastCGI, и для каждого виртуального хоста в httpd-vhosts.conf
задан свой php.ini
:
# # Виртуальный хост localhost25 # <VirtualHost *:80> ServerAdmin admin@localhost25 ServerName localhost25 DocumentRoot "D:/work/localhost25/www" ServerAlias host25.ru www.host25.ru # Переопределяем PHPRC, чтобы у хоста был свой php.ini FcgidInitialEnv PHPRC "D:/work/localhost25" ErrorLog D:/work/localhost25/error.log CustomLog D:/work/localhost25/access.log common </VirtualHost>
Здесь нужно изменить только одну строку:
DocumentRoot "D:/work/localhost25/www/web"
И отредактирвать php.ini
для этого виртуального хоста:
; The root of the PHP pages, used only if nonempty. ; if PHP was not compiled with FORCE_REDIRECT, you SHOULD set doc_root ; if you are running php as a CGI under any web server (other than IIS) ; see documentation for security issues. The alternate is to use the ; cgi.force_redirect configuration below ; http://php.net/doc-root doc_root = "d:/work/localhost25/www"
doc_root = "d:/work/localhost25/www/web"
Добавляем .htaccess
Второй способ — создаем файл .htaccess
в корне сайта и добавляем в него две строчки кода:
RewriteEngine on RewriteRule ^(.+)?$ /web/$1
Первая строка включает модуль mod_rewrite
, с помощью которого можно управлять адресами. А вторая — полученный запрос перенаправляет в директорию web
.
Человекопонятные URL
Создаем файл .htaccess
в директории web
и добавляем в него четыре строчка кода:
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
Здесь мы говорим, что если запрос не идет к реально существующему файлу или каталогу (например, js-скрипт или изображение), тогда его нужно перенаправить на файл index.php
.
Теперь осталось добавить в файл конфигурации config/web.php
настройку baseUrl
и раскомментировать настройки компонента UrlManager
:
<?php $params = require(__DIR__ . '/params.php'); $config = [ /*.....*/ 'components' => [ /*.....*/ 'request' => [ 'baseUrl' => '', 'cookieValidationKey' => '.....', ], 'urlManager' => [ // включаем поддержку SEF URL 'enablePrettyUrl' => true, // не добавлять в URL index.php 'showScriptName' => false, // правила преобразования адресов 'rules' => [], ], /*.....*/ ], 'params' => $params, ]; return $config;
Теперь страницы сайта доступны по URL:
server.com/site/about
server.com/site/contact
server.com/site/login
Чтобы избавиться от site
в URL, добавим несколько правил преобразования адресов:
<?php $params = require(__DIR__ . '/params.php'); $config = [ 'id' => 'basic', /*.....*/ 'components' => [ /*.....*/ 'request' => [ 'baseUrl' => '', 'cookieValidationKey' => '.....', ], 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ 'about' => 'site/about', 'contact' => 'site/contact', 'login' => 'site/login', ], ], /*.....*/ ], 'params' => $params, ]; return $config;
Теперь страницы сайта доступны по URL:
server.com/about
server.com/contact
server.com/login
Добавлять правила для каждой страницы не очень удобно, но можно сделать так:
'rules' => [ '<action:(about|contact|login)>' => 'site/<action>', ],
Или даже так:
'rules' => [ '<action:[-a-zA-Z0-9_]+>' => 'site/<action>', ],
Дополнительно
- Как убрать web и настроить ЧПУ в Yii2?
- Yii2. Разбор и генерация URL
- Yii2. Процесс формирования ссылок. Часть 1
- Yii2. Процесс формирования ссылок. Часть 2
Поиск: Apache • FastCGI • php.ini • URL • Web-разработка • Yii2 • Фреймворк • .htaccess • SEF • ЧПУ • SEO