На хостинге установлен 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.
Сам не раз сталкивался с клиентами, у которых был обычный хостинг, где не было возможности прописать корневую директорию.
Вот как я решал данную проблему:
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 и наслаждаемся жизнью :)
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости