在 YII2 基本应用程序中从 url 隐藏 'web' 文件夹时出现问题

problems when hiding the 'web' folder from the url in YII2 basic application

YII2 基本应用安装在 'ims' folder.The 的本地主机下 folder.The 链接就像

http://192.168.0.99/ims/web/(首页)

http://192.168.0.99/ims/web/index.php?r=site%2Fabout(关于我们页面)

到目前为止我所做的是。

1) 在 web/.htaccess 文件中

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

2) 在根 .htaccess 中

Options -Indexes
RewriteEngine on
RewriteRule ^(.*)$ web/ [L]

3) 在config/web.php

'components' => [
        'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'enablePrettyUrl' => true,
            'showScriptName'  => false,
            'baseUrl' => '/',
        ],

这修复了以下问题:

1) 链接现在对 SEO 友好

2) index.php 现在不显示在 url

3) 可以通过http://192.168.0.99/ims/

访问主页

问题:- 关于、联系和登录链接现在更改为

http://192.168.0.99/site/about

http://192.168.0.99/site/contact

http://192.168.0.99/site/login

它缺少 url 'ims' 中的基本文件夹名称。对此有什么建议或想法吗?

注意:- 我不希望使用 Apache 配置来实现此目的,也不希望将 Web 文件夹的内容移到外面。 我希望在不更改 YII2 基本应用程序结构的情况下从 url 中隐藏 'web'。

我在这里回答我自己的问题:-

我唯一需要做的改变就是

'baseUrl' => '/', to 'baseUrl' => '/ims',

所以更改后的代码看起来像

    'components' => [
        'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'enablePrettyUrl' => true,
            'showScriptName'  => false,
            'baseUrl' => '/ims',
        ],

现在我可以浏览所有没有文字 'web' 的页面。这是在不进行任何 apache 配置或移动根目录中的 web 文件夹的情况下实现的。 :)

  1. 在 web/.htaccess 文件中

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
  1. 在根 .htaccess 中

Options -Indexes
RewriteEngine on
RewriteRule ^(.*)$ web/ [L]
  1. 在config/web.php

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

'components' => [
        'request' => [
            'baseUrl' => $baseUrl,
        ],
        'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'enablePrettyUrl' => true,
            'showScriptName'  => false,
            'baseUrl' => '/',
        ],

到目前为止,这终于对我有用了

1.在 web/.htaccess 文件中

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

2。然后在 root .htaccess

<code>
    Options -Indexes
    RewriteEngine on
    RewriteRule ^(.*)$ web/ [L]
</code>

3。在config/web.php

<code>
    use \yii\web\Request;
    $baseUrl = str_replace('/web', '', (new Request)->getBaseUrl());
    'components' => [
        'request' => ['baseUrl' => $baseUrl,],
        'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'enablePrettyUrl' => true,
            'showScriptName'  => false,
        ],
</code>

注意:只需删除 config/web 中的 'baseUrl'=>'/'。php