我在一个子目录上部署了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)
正如你可以看到我有一个defaultRoute
是site/login
但似乎我一直在重定向的/login
,这是不是在一个子文件夹的链接.
任何帮助如何在子目录中设置yii2
对你的帮助表示感谢.谢谢!
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)
应该返回相同的目录与较少(和恕我直言清洁)代码.
尝试通过设置项目文件夹的路径来使用文件的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)