Yii2 не находит / backend / web после изменений .htaccess - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь получить расширенный шаблон Yii2 на VPS. Все работает нормально с точки зрения алгоритмов и путей, пока я не попытаюсь включить «симпатичный URL» через файлы конфигурации и .htaccess. Он отлично работает для / frontend, но / backend больше не доступен. Я все еще новичок ie в .htaccess, поэтому любая помощь будет оценена.

Root .htaccess:

<IfModule mod_rewrite.c>
 RewriteEngine on

 RewriteBase /
 RewriteRule backend backend\.php [T=application/x-httpd-php]

 RewriteCond %{REQUEST_URI} !^public
 RewriteRule ^(.*)$ frontend/web/$1 [L]
</IfModule>

# Deny accessing below extensions
<Files ~ "(.json|.lock|.git)">
Order allow,deny
Deny from all
</Files>

# Deny accessing dot files
RewriteRule (^\.|/\.) - [F]

common \ config \ main. php ( urlManager)

        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [ 
                '<controller:\w+>/<id:\d+>' => '<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',     
            ],
        ],

frontend / web / .htaccess

RewriteEngine on

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

Я также попытался изменить frontend / config / main. php basePath как например:

use yii\web\Request;
$baseUrl = str_replace('/frontend/web', '', (new Request)->getBaseUrl());

Но безрезультатно, поскольку при попытке доступа к серверу я получу только 500 ошибок (и ничего больше).

Примечание: mode_rewrite был включен как через a2enmod и через apache2.conf.

1 Ответ

0 голосов
/ 16 апреля 2020

Yii2 расширенная конфигурация .htaccess

.htaccess

Options -Indexes
Options FollowSymlinks
RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [L,R=301]

RewriteCond %{REQUEST_URI} ^/admin/$
RewriteRule ^(admin)/$ /$1 [R=301,L]
RewriteCond %{REQUEST_URI} ^/admin
RewriteRule ^admin(/.+)?$ /backend/web/$1 [L,PT]

RewriteCond %{REQUEST_URI} ^.*$
RewriteRule ^(.*)$ /frontend/web/$1

.htaccess - бэкэнд

# use mode rewrite for pretty URL support
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

.htaccess - интерфейс

<IfModule mod_rewrite.c>
        Options +FollowSymlinks

        # Включаем mod_rewrite и перенаправляем со слэша
        RewriteEngine On
        RewriteBase /
        RewriteCond %{HTTP_HOST} (.*)
        RewriteCond %{REQUEST_URI} /$ [NC]
        RewriteRule ^(.*)(/)$ $1 [L,R=301]

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

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...