Коде с Yii2 удалить индекс.php из url

когда я устанавливаю опцию в Yii для удаления индекса.php из URL я получаю ошибку 404 и эту ошибку в журналах ошибок File does not exist: /var/live/var. В моем браузере я получаю эту ошибку The requested URL /var/decat/frontend/web/index.php was not found on this server. но файл именно в этом месте. Что может объяснить, что мой корень документа /var/live и decat-это псевдоним, как показано в файле conf.

этот url-адрес отлично работает http://130.211.165.180/decat/index.php / сайт / логин но когда я удалить индекс.PHP-это, когда я получаю ошибку. Я следил за всем. инструкции по его настройке в файле conf. Я даже пробовал через .файл htaccess. Вот информация из моего файла conf.

Alias /decat /var/decat/frontend/web

<Directory "/var/decat/frontend/web">
        # use mod_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 
        Options -Indexes FollowSymLinks 
        AllowOverride All
        Order allow,deny 
        Allow from all 
</Directory>

5 ответов


добавить RewriteBase /decat/ после RewriteEngine on и перезапустите apache.


вы должны установить компонент Url Manager следующим образом:

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false, // Only considered when enablePrettyUrl is set to true
],

официальные документы:


Yii2 удалить web из url

1) отредактируйте свой config / web.php файл со следующим по

<?php
use \yii\web\Request;

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

return [
    ...
    'components' => [
            'request' => [
                'baseUrl' => $baseUrl,
     ],
      ...
    ]
]
?>

2) Добавьте следующий htaccess в root / web

RewriteEngine On RewriteBase /

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

RewriteRule . index.php

3) добавьте следующий htaccess в корневую папку, где установлено приложение

# prevent directory listings
Options -Indexes
IndexIgnore */*

# follow symbolic links
Options FollowSymlinks
RewriteEngine on
RewriteRule ^(.+)?$ web/

enter image description here


Я думаю, что это ваша конфигурация Apache, которая неверна... Вы говорите ему переписывать запросы только одного символа, когда я его читаю?

Я думаю, что это должно быть:

RewriteRule ^/(.*) index.php/ [L]

но я могу ошибаться, а не apache специалист


вы должны изменить .htaccess as

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\?*$ index.php?r= [L,QSA]

и правило urlManager как

 'urlManager' => [
    'class' => 'yii\web\UrlManager',
    // Disable index.php
    'showScriptName' => false,
    // Disable r= routes
    'enablePrettyUrl' => true,
    'rules' => array(
            '<controller:\w+>/<id:\d+>' => '<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
            '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
    ),
    ],

Я использую это в моем приложении. и это работает. мой url обувь какwww.example.com/user/view?id=1