在子目录中部署yii2

时间:2015-07-22 15:10:41

标签: 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]

但我觉得这个错了......

我的web.php上也有这个。

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

正如您所看到的,defaultRoutesite/login,但似乎我继续重定向/login,而不是在子文件夹链接中。

如何在子目录

中设置yii2的任何帮助

非常感谢您的帮助。谢谢!

3 个答案:

答案 0 :(得分:7)

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

// in web.php
$config = [
    'id' => 'basic',
    //... other codes here...
    'components' => [
        'urlManager' => [
            'class' => 'yii\web\UrlManager',        
            'baseUrl' => 'myproject',
        ]
    ]
]

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

'basePath' => dirname(__DIR__),

应使用less(和IMHO清洁程序)代码返回相同的目录。

答案 1 :(得分:4)

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

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]

答案 2 :(得分:2)

我有同样的问题,修改x <- c("2)", "This", "is", "a", "Test:", "Find", "the", "dots.", "Which", "ones") which(grepl("\\.$", x) | grepl("\\:$", x) | grepl("\\)$", x)) 有奇怪的效果,
urlManager.baseUrl 配置修复网址创建和根,
assetManager.baseUrl 配置修复脚本/样式路径

.htaccess