[РЕШЕНО] Убрать /frontend/web/ из строки адреса

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Vespertilio
Сообщения: 271
Зарегистрирован: 2012.11.30, 07:33

[РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение Vespertilio »

Не получаеться убрать это на локальной машине. Использую OpenServer. Раньше вручную стояли пути в /frontend/web в конфиге openserver'a и все было норм. На хостинге указывал пути через htaccess и все было нормально, но я решил сделать на локальной машине как и на хостинге, через htaccess, сделал все 1 в 1 и структуру каталогов тоже и вылезли эти пути. Настроенно все как в посте nepster'a
Последний раз редактировалось Vespertilio 2014.10.20, 20:29, всего редактировалось 1 раз.
ShNURoK
Сообщения: 168
Зарегистрирован: 2012.04.12, 05:44
Контактная информация:

Re: Убрать /frontend/web/ из строки адреса

Сообщение ShNURoK »

Первое что стоит спросить, у вас точно apache запущен, а не nginx?
Vespertilio
Сообщения: 271
Зарегистрирован: 2012.11.30, 07:33

Re: Убрать /frontend/web/ из строки адреса

Сообщение Vespertilio »

ShNURoK писал(а):Первое что стоит спросить, у вас точно apache запущен, а не nginx?
Точно =) чистый апач

Ну .htaccess он подхватывает, при заходе просто по локальному адресу сайта (в моем случае yii2.dev) он открывает его без проблем, а уже при переходе по ссылкам к /controller/action приписываеться полный путь : /frontend/web/controller/action
Vespertilio
Сообщения: 271
Зарегистрирован: 2012.11.30, 07:33

Re: Убрать /frontend/web/ из строки адреса

Сообщение Vespertilio »

Мне вот и не понятно, почему rewrite не происходит если он прописан в .htaccess, ведь он работает. Как-то он частично отрабатывает.
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Убрать /frontend/web/ из строки адреса

Сообщение nepster »

.htaccess разместить в корне сайта

Код: Выделить всё

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On
</IfModule>
 
<IfModule mod_rewrite.c>
    # deal with admin first
    RewriteCond %{REQUEST_URI} ^/(admin)
    RewriteRule ^admin/assets/(.*)$ backend/web/assets/$1 [L]
    RewriteRule ^admin/css/(.*)$ backend/web/css/$1 [L]

    RewriteCond %{REQUEST_URI} !^/backend/web/(assets|css)/
    RewriteCond %{REQUEST_URI} ^/(admin)
    RewriteRule ^.*$ backend/web/index.php [L]

    RewriteCond %{REQUEST_URI} ^/(assets|css|js|images)
    RewriteRule ^assets/(.*)$ frontend/web/assets/$1 [L]
    RewriteRule ^css/(.*)$ frontend/web/css/$1 [L]
    RewriteRule ^js/(.*)$ frontend/web/js/$1 [L]
    RewriteRule ^images/(.*)$ frontend/web/images/$1 [L]
    RewriteRule ^(.*)$ frontend/web/$1 [L]

    RewriteCond %{REQUEST_URI} !^/(frontend|backend)/web/(assets|css|js)/
    RewriteCond %{REQUEST_URI} !index.php
    RewriteCond %{REQUEST_FILENAME} !-f [OR]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^.*$ frontend/web/index.php
</IfModule> 



.htaccess разместить в /frontend/web/ и /backend/web/.htaccess

Код: Выделить всё

# Если это папка или файл, открываем его
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# В противном случае перенаправляем на index.php
RewriteRule . index.php


/frontend/config/main.php

Код: Выделить всё

        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            //'suffix' => '.html',
            'rules' => [
                '' => 'site/index',
                
                
                '<action>'=>'site/<action>',
            ],
        ], 
         'assetManager' => [
             'basePath' => '@webroot/assets',
             'baseUrl' => '@web/assets'
        ],  
        'request' => [
            'baseUrl' => ''
        ]
         


/backend/config/main.php

Код: Выделить всё

        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            //'suffix' => '.html',
            'rules' => [
                '' => 'site/index',
                
                
                '<action>'=>'site/<action>',
            ],
        ], 
         'assetManager' => [
             'basePath' => '@webroot/assets',
             'baseUrl' => '@web/assets'
        ],  
        'request' => [
            'baseUrl' => '/admin'
        ]
         
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Убрать /frontend/web/ из строки адреса

Сообщение nepster »

так же опенсервер стоит.
ODY
Сообщения: 24
Зарегистрирован: 2013.09.19, 12:18

Re: Убрать /frontend/web/ из строки адреса

Сообщение ODY »

я сделал так, пкм-дополнительно-конфигурация-Apache 2.*.* откроется 2 файла, редактируем только Apache-2.*.*_vhost.conf, я добавил такие строки:

Код: Выделить всё

#---------------------------------------------#
# Начало блока конфигурации HTTP хоста        #
#---------------------------------------------#
<VirtualHost *:80>
    ServerName yii2.loc
    DocumentRoot C:\OpenServer\domains\yii2.loc\www
    <Directory C:\OpenServer\domains\yii2.loc\www>
        DirectoryIndex index.php
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
#---------------------------------------------#
# Конец блока конфигурации HTTP хоста         #
#---------------------------------------------# 
папка www - это папка web
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Убрать /frontend/web/ из строки адреса

Сообщение samdark »

В последних апачах по умолчанию AllowOverride отключен.
Vespertilio
Сообщения: 271
Зарегистрирован: 2012.11.30, 07:33

Re: Убрать /frontend/web/ из строки адреса

Сообщение Vespertilio »

nepster писал(а):.htaccess разместить в корне сайта
Да, я все точно так же сделал. Не понимаю в чем же проблема.

AllowOverride All есть в конфиге апача опен сервера. Там стоит маска для сайтов:

Код: Выделить всё

<Directory "%ssitedir%/*">
    AllowOverride All
    Options -MultiViews +Indexes +FollowSymLinks +IncludesNoExec +Includes +ExecCGI
    <LimitExcept GET POST HEAD>
        Order deny,allow
        Deny from all
    </LimitExcept>
</Directory>
В любом случае пробовал и в vhosts вручную прописать, никакой реакции. Я уже голову сломал =)
На хостинге полностью аналогичный конфиг и все отлично работает
astappev
Сообщения: 20
Зарегистрирован: 2014.02.18, 20:39

Re: Убрать /frontend/web/ из строки адреса

Сообщение astappev »

Я просто переключил локально с модуля apache+nginx, на чисто Apache. Все проблемы исчесли и все Rewrite работают.
Vespertilio
Сообщения: 271
Зарегистрирован: 2012.11.30, 07:33

Re: Убрать /frontend/web/ из строки адреса

Сообщение Vespertilio »

astappev писал(а):Я просто переключил локально с модуля apache+nginx, на чисто Apache. Все проблемы исчесли и все Rewrite работают.
А у меня и стоит чистый апач 2,2,27, без "+nginx". Так и не победил эту проблему. И на форуме опен сервера молчат. Вернул пути обратно через настройки доменов. жаль.
Аватара пользователя
MetaDriver
Сообщения: 43
Зарегистрирован: 2014.04.21, 20:53
Откуда: Казань

Re: Убрать /frontend/web/ из строки адреса

Сообщение MetaDriver »

Vespertilio писал(а):
astappev писал(а):Я просто переключил локально с модуля apache+nginx, на чисто Apache. Все проблемы исчесли и все Rewrite работают.
А у меня и стоит чистый апач 2,2,27, без "+nginx". Так и не победил эту проблему. И на форуме опен сервера молчат. Вернул пути обратно через настройки доменов. жаль.
Гляньте здесь: viewtopic.php?f=30&t=19729#p115806
Аватара пользователя
mozart89
Сообщения: 8
Зарегистрирован: 2013.05.04, 20:13

Re: Убрать /frontend/web/ из строки адреса

Сообщение mozart89 »

For Basic Applications:
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on

# if request dosn't start with web add it
RewriteCond %{REQUEST_URI} !^/(web)
RewriteRule (.*) /web/$1

# if file or directory dosn't exists go to /web/index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /web/index.php
For Advanced Applications:
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on



# if request begins with /admin remove admin and ad /backend/web/
RewriteCond %{REQUEST_URI} ^/admin
RewriteRule ^admin\/?(.*) /backend/web/$1

# other requests add /frontend/web/$1
RewriteCond %{REQUEST_URI} !^/(frontend/web|backend/web|admin)
RewriteRule (.*) /frontend/web/$1

# if frontend request
RewriteCond %{REQUEST_URI} ^/frontend/web
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /frontend/web/index.php

# if backend request
RewriteCond %{REQUEST_URI} ^/backend/web
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /backend/web/index.php
Через .htaccess в корневой папке
Источник: http://www.yiiframework.com/forum/index ... ntry257425
Vespertilio
Сообщения: 271
Зарегистрирован: 2012.11.30, 07:33

Re: Убрать /frontend/web/ из строки адреса

Сообщение Vespertilio »

Прошу прощения, я уже давно победил эту проблему, htaccess'ы отлично работают, не помню уже в чем дело было.
Аватара пользователя
VaNnOrus
Сообщения: 96
Зарегистрирован: 2014.10.09, 12:50

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение VaNnOrus »

Кто-нибудь может ответить мне как при этом апач должен быть настроен?
Если ставить документ рут на фронтенд/веб, то, очевидно, хтаксесс в корне приложения (как это указано в ответах по ссылкам выше) не будет обрабатываться, а ставить документ рут на корень приложения небезопасно согласно документации.
Ничерта не понимаю...
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение anton44eg »

лучше без htaccess и root в frontend/web, а для backend/web отдельный хост
Vespertilio
Сообщения: 271
Зарегистрирован: 2012.11.30, 07:33

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение Vespertilio »

anton44eg писал(а):лучше без htaccess и root в frontend/web, а для backend/web отдельный хост
Редко какие шаред хостинги дают менять root.

Кстати, при обновлении до релиза почему-то опять стали вываливаться в строке пути с прежними htaccess'ми, что там могло поменяться?
Vespertilio
Сообщения: 271
Зарегистрирован: 2012.11.30, 07:33

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение Vespertilio »

Все нормально, забыл прописать
'request' => [
'baseUrl' => ''
]
niconphantom
Сообщения: 5
Зарегистрирован: 2014.10.29, 21:29

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение niconphantom »

Только начал изучать Yii2, пересмотрел кучу подобных постов, но пока не нашел решения. Все делаю как описано на первой странице (т.е совет от nepster-a идеинтичный этому - viewtopic.php?f=19&t=15744&start=20#p102679), только на моём локальном сервере (Apache), хочу все сделать не в сайт руте а http://localhost/yii/ все работает за исключением стилей бутстрапа и прочих CSS... Учитывая рекомендации на первой странице, что еще нужно изменить в .htaccess или конфигах если нужно http://localhost/yii ? Огромное спасибо!
niconphantom
Сообщения: 5
Зарегистрирован: 2014.10.29, 21:29

Re: [РЕШЕНО] Убрать /frontend/web/ из строки адреса

Сообщение niconphantom »

Проблема решилась вот таким .htaccess:

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on



# if request begins with /admin remove admin and ad /backend/web/
RewriteCond %{REQUEST_URI} ^/admin
RewriteRule ^admin\/?(.*) /backend/web/$1

# other requests add /frontend/web/$1
RewriteCond %{REQUEST_URI} !^/(frontend/web|backend/web|admin)
RewriteRule (.*) /frontend/web/$1

# if frontend request
RewriteCond %{REQUEST_URI} ^/frontend/web
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /frontend/web/index.php

# if backend request
RewriteCond %{REQUEST_URI} ^/backend/web
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /backend/web/index.php
Ответить