@Megumin

Yii2 ошибка 404 при удалении /web из url на локальном хосте при помощи .htaccess?

Всем привет. Проблема заключается в следующем: при помощи .htaccess хочу сделать чтобы в url вместо хост/web/site/index отображалось хост/site/index. Здесь уже есть тема как это сделать, вот тут Как в Yii2 basic убрать web/ из url при помощи .htaccess и правил urlManager'а? Однако, когда я создаю .htaccess вставляю туда:
Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on

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

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

Затем в корневой папке добавляю строку 'baseUrl'=> '', в request в config/web.php то при попытке зайти на сайт браузер выдает следующее:
Not Found
The requested URL /web/index.php was not found on this server.
Apache/2.4.23 (Win64) PHP/5.6.25 Server at localhost Port 80


В качестве сервера использую пакет WAMP. И по моему месяца 2 назад я проделывал эту же операцию и все работало. Я пробовал переустанавливать WAMP, но результат все тот же. Я пошел дальше и закинул этот же проэкт на бесплатный хостинг в инете, и что забавно там все прекрасно работает с этими .htaccess, а на локалке такая беда. В общем я потратил не один день на поиски решения этой проблемы, сдался и пришел сюда просить помощи. Никак не могу понять где собака зарыта. Я нуб. Помогите пожалуйста.
  • Вопрос задан
  • 258 просмотров
Пригласить эксперта
Ответы на вопрос 2
slo_nik
@slo_nik Куратор тега Yii
Доброе утро.
Я делаю через два .htaccess
Первый, в web/.htaccess
RewriteEngine on

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

RewriteRule . index.php

Второй, в корне проекта
<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>

В baseUrl ничего не указываю если приложение находится в корне, то есть, по адресу site.com.
Если проект находится в поддиректории, например yii2_test и адрес получается site.com/yii2_test, то тогда в baseUrl указывается имя директории.
В urlManager, что бы можно было зайти по адресу site.com, без всяких web и site/index в адресной строке, создаётся такое правило:
'urlManager' => [
            'enablePrettyUrl' => true,
            'enableStrictParsing' => true,
            'showScriptName' => false,
            'rule' => [
               '' => 'site/index',
              '<_a:[\w-]+>' => 'site/<_a> // для остальных страниц по умолчанию, about, contact
            ]
       ]

Всё вышеизложенное относится к basic, если надо в advanced убрать из адреса frontend и backend(можно указать любое имя для backend), то там .htaccess, который в корне приложения, будет другого содержания, в web/.htaccess ничего не меняется.
Ответ написан
Комментировать
shambler81
@shambler81 Куратор тега htaccess
У вас 1 урл или вам нужно регулярное выражение для убирания из урла всех web ?
RewriteRule хост/web/site/index$ /хост/site/index. [L,NC]

Если вам нужно сделать это для всего сайта
ТО тут вариантов уже больше, самй простой именно простой это сделать "мягкую линку" и все, тогда сайт физически будет лежать там и там. Но скорее всего это не подойдет.
если тебе нужна регулярка то
RewriteCond %{REQUEST_URI} ^/dir1/(.*)$ 
# если строка начинается с /dir1/ 
RewriteRule ^(.*)$ /dir1%1 [R=301,L] 
#Перенаправить все урлы с начинающиеся с dir1 на dir2 с сохранением дальнейшей структуры URL

более детально примеры давал тут.
https://klondike-studio.ru/blog/snipet-for-htaccess/ - тут более подробно писал и другие примеры.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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