Убрать “web” из адреса в Yii2

394
12 февраля 2017, 13:45

На хостинге установлен yii2-basic, установлен не в корень, а в htdocs/basic.

Хочу http://домен/basic/web/about заменить на http://домен/basic/about.

На данный момент последний адрес перенаправляет на главную страницу.

В basic лежит следующий .htaccess:

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On
</IfModule>
<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_URI} ^/.*
    RewriteRule ^(.*)$ web/$1 [L]
    RewriteCond %{REQUEST_URI} !^/web/
    RewriteCond %{REQUEST_FILENAME} !-f [OR]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^.*$ web/index.php
</IfModule>

В basic/web тоже лежит .htaccess:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

В config/web.php:

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        '' => 'site/index',
        '<action>'=>'site/<action>',
    ],
],

В 'request' добавление 'baseUrl' => '' даёт 404.

Answer 1

Сам не раз сталкивался с клиентами, у которых был обычный хостинг, где не было возможности прописать корневую директорию.

Вот как я решал данную проблему:

1) В корне проекта создаем .htaccess с содержимым:

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On
</IfModule>
<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_URI} ^/.*
    RewriteRule ^(.*)$ basic/web/$1 [L]
    RewriteCond %{REQUEST_URI} !^/basic/web/
    RewriteCond %{REQUEST_FILENAME} !-f [OR]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^.*$ basic/web/index.php
</IfModule>

2) В папке web создаем .htaccess с содержимым:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

3) Далее открываем файл config/web.php и делаем следующее:

Находим строчку

'request' => [
    'cookieValidationKey' => .......,
],

И добавляем в массив строчку 'baseUrl' => ''

'request' => [
    'cookieValidationKey' => .......,
    'baseUrl' => '',
],

4) Заранее забегаю вперед и пишу, как убрать ещё и index.php

Находим строчку в файле config/web.php

'urlManager' => [
     ........ //остальная часть кода
],

И добавляем в массив строчку 'showScriptName' => false

'urlManager' => [
     'showScriptName' => false,
     ........ //остальная часть кода
],

Данная инструкция уместна для структуры папок, указанной Вами. Обычно проект заливают в корень сайта. В таком случае убираем в первом пункте basic и наслаждаемся жизнью :)

READ ALSO
Подключение Siebar-a в Wordpress

Подключение Siebar-a в Wordpress

Доброго времени суток, уважаемые гуру кодинга

386
Google Calendar add event

Google Calendar add event

Решил поэкспериментировать с Google Calendar и попробовать реализовать добавление события в календарь на определённый день и времяОднако спустя...

271