在子目录中部署yii2

Pin*_*wer 9 php yii yii2

我在一个子目录上部署了yii2.我在重定向上遇到问题.在我的localhost上,我的项目不在子目录中,所以我没有任何问题.但是当我将它部署在我们的实时服务器上并将项目放在子目录中时,我遇到了问题.

我的问题是,当我访问我网站的主页时,我被重定向到网站的根目录.

以下是一个示例:主站点:http://example.com/

Yii2网站:http://example.com/myproject/

当我尝试访问http://example.com/myproject/时,我希望在http://example.com/myproject/login上重定向,而不是重定向到http://example.com/login.

我已经将我的.htaccess改成了这个

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 ^(.*) system/index.php/$1 [QSA,L]
Run Code Online (Sandbox Code Playgroud)

但我认为这个错误虽然......

我的web.php上也有这个

$config = [
    'id' => 'basic',
    'basePath' => dirname(__FILE__) . DIRECTORY_SEPARATOR . '..',
    'defaultRoute' => 'site/login',
     //... other codes here...
Run Code Online (Sandbox Code Playgroud)

正如你可以看到我有一个defaultRoutesite/login但似乎我一直在重定向的/login,这是不是在一个子文件夹的链接.

任何帮助如何在子目录中设置yii2

对你的帮助表示感谢.谢谢!

tar*_*leb 7

UrlManager不知道该应用程序不在Web服务器的根目录中.尝试设置您$config['components']['urlManager']['baseUrl']的项目路径:

// in web.php
$config = [
    'id' => 'basic',
    //... other codes here...
    'components' => [
        'urlManager' => [
            'class' => 'yii\web\UrlManager',        
            'baseUrl' => 'myproject',
        ]
    ]
]
Run Code Online (Sandbox Code Playgroud)

顺便说一下,你可以将你的basePath定义缩短为

'basePath' => dirname(__DIR__),
Run Code Online (Sandbox Code Playgroud)

应该返回相同的目录与较少(和恕我直言清洁)代码.


Sal*_*ani 5

尝试通过设置项目文件夹的路径来使用文件的RewriteBase参数.htaccess

RewriteEngine on

RewriteBase /myproject

# 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
RewriteRule ^(.*) system/index.php/$1 [QSA,L]
Run Code Online (Sandbox Code Playgroud)