@lsa413

Как в yii2 формировать ЧПУ без web/ в адрессной строке?

Здравствуйте!

Пытаюсь в проекте yii2 избавиться от папки web в адресной строке и переходе по ссылкам.
Распишу по шагам, что сделал и чего не получается:
Для начала уточню, что дистрибутив basic лежит в папке localhost, и basic переименован в имя сайта. Короче говоря, в браузере на сайт попадают так:
localhost/sitename/web

Что сделал:
1. В папке web создал .htaccess с содержимым (взято из документации yii):
Options  +FollowSymLinks
IndexIgnore  */*
RewriteEngine on

# If a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Otherwise forward it to index.php
RewriteRule . index.php


2. В файле config/web.php включаю urlManager в разделе components:
'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
        ],


Теперь ЧПУ работает и можно спокойно настраивать всякие шаблоны, но нужно избавиться от папки web/ в адресной строке браузера. И вот это не получается ни в какую.
Поясню, что я хочу сделать это без редактирования VirtualHost в Apache, желательно только средствами .htaccess и настройками Yii2.

В сети есть несколько советов на эту тему, но ни один у меня не заработал. Очевидно, что нужно создать .htaccess в корне сайта и настроить его так, что бы он отсек web/ из запроса и передал в .htaccess в папке web. В сети бродит такой вариант .htaccess, но повторюсь, он у меня не работает:
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on

RewriteCond %{REQUEST_URI} !^/(web)
RewriteRule (.*) /web/$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /web/index.php


Еще советуют задать пустой baseUrl в config/web, но тогда вообще все пути рушатся, особенно для подключаемых js и css скриптов.

Что делать? :)
  • Вопрос задан
  • 1888 просмотров
Пригласить эксперта
Ответы на вопрос 2
R0dger
@R0dger
Laravel/Yii/2 AngularJs PHP RESTful API
Если у Вас APACHE смотрит в папку localhost, то перестройте его так, что бы он смотрел сразу в папку WEB и будет Вам счастье..
Ответ написан
@A1eksandr
1)
htaccess в папке WEB.

# Mod_Autoindex

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)?$ index.php

В конфиге:
'request' => [
'baseUrl' => ''
],

возможно нужно будет перенастроить маршруты в зависимости от того что сейчас прописано

2) Второй вариант, можно указать в настройках виртуального хоста apache DocumentRoot /web/ тогда больше ничего делать не нужно
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы