我在一个子目录上部署了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...
正如您所看到的,defaultRoute
为site/login
,但似乎我继续重定向/login
,而不是在子文件夹链接中。
如何在子目录
中设置yii2的任何帮助非常感谢您的帮助。谢谢!
答案 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