Как настроить URL manager без ошибки 404

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Как настроить URL manager без ошибки 404

Сообщение svil »

Были настройки на локальном компьютере:

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

'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                'category/<id:\d+>/page/<page:\d+>' => 'category/view',
                'category/<id:\d+>' => 'category/view',
                'product/<id:\d+>' => 'product/view',
                'search' => 'category/search',
                'cart/<id:\d+>' => 'cart/pi',
                'brand/<id:\d+>' => 'brand/view',
                'test/<id:\d+>/page/<page:\d+>' => 'test/page',
                'test/<id:\d+>' => 'test/page',

               //    '' => 'site/index',
               // '<controller:\w+>/<action:\w+>/' => '<controller>/<action>',
            ],
        ],

Все работало.
Перенесла на хостинг, если убрать весь urlManager - все работает, но без красивых урлов.
Если оставить вышеуказанные настройки, то при клике на любую сслылку, кроме Главной страницы, выскакивает ошибка

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

The requested URL /shop2/web/category/29 was not found on this server.
Почему он не работает?
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: Как настроить URL manager без ошибки 404

Сообщение skynin »

настройки вебсервера
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Как настроить URL manager без ошибки 404

Сообщение svil »

2 файла .htaccess в корне сайта и в папке web:

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

# ----------------------------------------------------------------------
# Adds some security for the Apache server configuration for use with
# ----------------------------------------------------------------------

# "-Indexes" will have Apache block users from browsing folders without a default document
# Usually you should leave this activated, because you shouldn't allow everybody to surf through
# every folder on your server (which includes rather private places like CMS system folders).
<IfModule mod_autoindex.c>
  Options -Indexes
</IfModule>


# Block access to "hidden" directories whose names begin with a period. This
# includes directories used by version control systems such as Subversion or Git.
<IfModule mod_rewrite.c>
  RewriteCond %{SCRIPT_FILENAME} -d
  RewriteCond %{SCRIPT_FILENAME} -f
  RewriteRule "(^|/)\." - [F]
</IfModule>


# Block access to backup and source files
# This files may be left by some text/html editors and
# pose a great security danger, when someone can access them
<FilesMatch "(\.(bak|config|sql|fla|psd|ini|log|sh|inc|swp|dist)|~)$">
  Order allow,deny
  Deny from all
  Satisfy All
</FilesMatch>

# Increase cookie security
<IfModule php5_module>
  php_value session.cookie_httponly true
</IfModule>

# Settings to hide index.php and ensure pretty urls
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
В корне сайта index.php

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

<?php
header("location: /shop2/web/");
?>
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Как настроить URL manager без ошибки 404

Сообщение someweb »

Корнем должна быть папка web
https://www.yiiframework.com/doc/guide/ ... ed-hosting
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: Как настроить URL manager без ошибки 404

Сообщение skynin »

-- 2 файла .htaccess в корне сайта и в папке web
это для апача, и если нет возможности указать ему прямо на /web

у вас на сервере:
1. апач?
2. какой у него стоит корневой каталог?

кроме того я думаю надо бы
RewriteBase /frontend/web/
указывать.
https://stackoverflow.com/questions/318 ... 2-htaccess
p.s.
вспомнил, у меня на одном хостинге такая ситуация была.

итак, в корне Yii2, не web

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

# Mod_Autoindex
<IfModule mod_autoindex.c>
    # Disable Indexes
    Options -Indexes
</IfModule>

# Mod_Rewrite
<IfModule mod_rewrite.c>
    # Enable symlinks
    Options +FollowSymlinks

IndexIgnore */*

    # Enable mod_rewrite
    RewriteEngine On

# Redirect all requests to web
#    RewriteCond %{REQUEST_URI} ^(.*)$
#    RewriteRule ^(.*)$ web/$1

RewriteCond %{REQUEST_URI} !^/(web)
RewriteRule ^assets/(.*)$ /web/assets/$1 [L]
RewriteRule ^css/(.*)$ web/css/$1 [L]
RewriteRule ^fonts/(.*)$ web/fonts/$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

</IfModule>
в web обычный

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

# Mod_Autoindex
<IfModule mod_autoindex.c>
  # Disable indexes
    Options -Indexes
</IfModule>

# Mod_Rewrite
<IfModule mod_rewrite.c>
  # Enable symlinks
  Options +FollowSymlinks
  # Enable mod_rewrite
  RewriteEngine On

  # If a directory or a file exists, use the request directly
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  # Otherwise forward the request to index.php
  RewriteRule . index.php
</IfModule>
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: Как настроить URL manager без ошибки 404

Сообщение skynin »

я вообще не понимаю откуда у людей берутся проблемы с регистром букв.
на винде разрабатываю. давно. не только под Yii2. не только на php.
сервера конечно под линухом. не помню чтобы приходилось переименовывть файлы после деплоя на линух.

а .htaccess в моем предыдущем посте решает проблему когда нет возможности указать именно на web, а можно только на корень всего приложения.

иначе да, веб сервер пытается найти путь
category/123/page/43543

то есть ищет каталог category, в нем каталог 123, в нем page и т.д.
и не находит
и ему неправильно сказали - что не нашел - отдавай на обработку index.php

вот он 404ую и отдает.

если, конечно, не нахимичили с регистрами букв в названиях файлов
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Как настроить URL manager без ошибки 404

Сообщение svil »

у меня basic yii2. Работала на mac os
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: Как настроить URL manager без ошибки 404

Сообщение skynin »

svil писал(а): 2018.07.10, 15:46 Работала на mac os
там кажется BSD под капотом. с регистром букв как в линухе...

это на винде если зачем-то хочется регистром букв в названиях файлов поиграться - то да, можно соорудить себе проблему.
зачем играются, например вместо view создают VIEW - мне и непонятно.

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

ну и если на хостинге Nginx а не Apache, или еще какой OpenResty без поддержки .htaccess - то надо их настраивать, как описано в доке хостинга
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Как настроить URL manager без ошибки 404

Сообщение svil »

https://drive.google.com/open?id=1zTE8i ... Ll_52P1FXF
https://drive.google.com/open?id=10Kuql ... ylK-1PnuvI
Это расположение папок на хостинге. Добавила 2 .htaccess в корень и в WEB, удалила из корня index.php.
Это .htaccess в shop2 (корне)

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

# Mod_Autoindex
<IfModule mod_autoindex.c>
    # Disable Indexes
    Options -Indexes
</IfModule>

# Mod_Rewrite
<IfModule mod_rewrite.c>
    # Enable symlinks
    Options +FollowSymlinks

IndexIgnore */*

    # Enable mod_rewrite
    RewriteEngine On

# Redirect all requests to web
#    RewriteCond %{REQUEST_URI} ^(.*)$
#    RewriteRule ^(.*)$ web/$1

RewriteCond %{REQUEST_URI} !^/(web)
RewriteRule ^assets/(.*)$ /web/assets/$1 [L]
RewriteRule ^css/(.*)$ web/css/$1 [L]
RewriteRule ^fonts/(.*)$ web/fonts/$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

</IfModule>
Это .htaccess в web

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

# Mod_Autoindex
<IfModule mod_autoindex.c>
  # Disable indexes
    Options -Indexes
</IfModule>

# Mod_Rewrite
<IfModule mod_rewrite.c>
  # Enable symlinks
  Options +FollowSymlinks
  # Enable mod_rewrite
  RewriteEngine On

  # If a directory or a file exists, use the request directly
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  # Otherwise forward the request to index.php
  RewriteRule . index.php
</IfModule>
Это index.php в web

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

<?php

// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';

$config = require __DIR__ . '/../config/web.php';
require_once __DIR__ . '/../functions.php';

(new yii\web\Application($config))->run();
удаленный index.php из корня

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

<?php
header("location: /~svetlanailina/shop/web/");
?>
Не работает. Работает, когда удаляю urlmanager из web.php(config), но без ЧПУ
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Как настроить URL manager без ошибки 404

Сообщение svil »

с регистром букв изначально все было ОК
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Как настроить URL manager без ошибки 404

Сообщение svil »

когда один шаблон basic пробую с urlmanager - тоже не работает, без urlmanager - работает
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Как настроить URL manager без ошибки 404

Сообщение svil »

Отключаю с этими настройками urlManager - все работает, но без ЧПУ - на shop2
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: Как настроить URL manager без ошибки 404

Сообщение skynin »

svil писал(а): 2018.07.10, 16:39 когда один шаблон basic пробую с urlmanager - тоже не работает
так сразу и сказал - неправильные настройки. как ведет себя веб-сервер я вам тоже написал.

какие у вас настройки на хостинге?
куда "смотрит" и какой веб-сервер?

вслепую тыкаться можно долго.

вот например у меня хостинг, поцепил на суб домены:

Список текущих субдоменов
Субдомен Директория
aaa.ddd.zzz /home/u776972871/public_html/aaa
bbb.ddd.zzz /home/u776972871/public_html/bbb
ccc.ddd.zzz /home/u776972871/public_html/ccc

то есть указал где искать .htaccess если запрос пришел на субдомен.
а там - весь Yii2
и htaccess который вам дал, перебрасывает дальше в web /home/u776972871/public_html/aaa/web

какие настройки у вашего хостинга?
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Как настроить URL manager без ошибки 404

Сообщение svil »

https://myhosting.ru/var/www/html/shop2
myhosting.ru - условное название, дальше путь такой как есть
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: Как настроить URL manager без ошибки 404

Сообщение skynin »

svil писал(а): 2018.07.10, 17:06 https://myhosting.ru/var/www/html/shop2
myhosting.ru - условное название, дальше путь такой как есть
"кривой" путь. причем и Wordpress по такому пути не заработает :)

но, если хочется чтобы по такому пути работало, и у вас стоит Апач то разбирайтесь с реврайтами
Как на самом деле работает mod_rewrite. Пособие для продолжающих
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Как настроить URL manager без ошибки 404

Сообщение svil »

вообще-то с wp как раз проблем то и не было
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Как настроить URL manager без ошибки 404

Сообщение svil »

это хостинг для тестирования, мне надо чтоб заработало
skynin
Сообщения: 400
Зарегистрирован: 2017.12.12, 10:09

Re: Как настроить URL manager без ошибки 404

Сообщение skynin »

svil писал(а): 2018.07.10, 17:13 вообще-то с wp как раз проблем то и не было
если указать ему такой home_dir как https://myhosting.ru/var/www/html/shop2 то конечно не будет.

только такой путь вряд ли приемлем на продакшене.
и если вы просто скопируете БД на прод с адресом https://shop2.myhosting.ru тогда и погворим :)

у WP даже настройки плагинов могут слететь, если всего лишь заменить
http://shop2.myhosting.ru на https://shop2.myhosting.ru
svil писал(а): 2018.07.10, 17:13 это хостинг для тестирования, мне надо чтоб заработало
The requested URL /shop2/web/category/29 was not found on this server
потому что корень сайта у вас
/var/www/html/shop2
а не
/shop2

реврайтами и отсекайте
или сделайте субдомен
https://shop2.myhosting.ru
и направьте его на
/var/www/html/shop2/web

тогда все и заработает, с обычными для Yii2 настройками

то есть
1. вы либо делайте по правильному сразу
2. либо разбирайтесь с реврайтами для такого тестового пути

документация по Yii2 рассчитана на 1ый вариант
возможности и документация mod_rewrite на 2ой - заталкивать любой сайт, в любые пути
Не желайте странного, и не будет у вас головной боли чтобы достичь этого странного.
Тем более что окажется что оно вам и не нужно было, странное это.
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Как настроить URL manager без ошибки 404

Сообщение svil »

Субдомен направляет сразу в web- не работает ЧПУ как и раньше
Ответить