我正在尝试将Yii站点设置为从子目录加载到根域。在我的根站点文件夹中,我只有root .htaccess 文件和子目录“ subdir ”,其中包含Yii站点。我找到了适合我当地环境的解决方案:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) subdir/index.php/$1 [QSA,L]
但是当我将网站上传到HostGator时,它无法正常工作 例如
如果我在本地环境中使用http://localhost/contact
,则会打开正确的页面(称为站点/联系人 - 站点控制器和联系人操作。我已添加Yii'联系人'=>'站点/联系人'规则到urlManager,因此http://localhost/contact
和http://localhost/site/contact
都可以工作)
如果我在HostGator上使用http://mydomain.com/contact
或(http://mydomain.com/site/contact
),我会得到默认索引页面(称为站点/索引 - 站点控制器和默认索引操作)
当我选择像http://mydomain.com/subdir/contact
那样直接访问子网站时,它可以正常工作,但如果我使用http://mydomain.com/contact
我想我需要以某种方式改变htaccess中的最后一条规则,但不确定如何。谢谢!
答案 0 :(得分:1)
我找到了可行的替代解决方案。我被迫使用旧式URL而不是路径,因此我将urlManager更改为:
'urlManager'=>array(
//'urlFormat'=>'path',
'showScriptName'=>true,
'caseSensitive'=>false,
'rules'=>array(
...
)
)
我的root htaccess现在看起来像这样:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /subdir/index.php?r=$1 [QSA,L]
所以,访问时
http://mydomain.com/site/contact
实际映射的网址是
http://mydomain.com/subdir/index.php?r=site/contact
结果返回正确的联系页面
答案 1 :(得分:0)
因为,您在上一个问题中表示www.mysite.com/mysite/frontend/www/controller/action
工作正常;你应该使用:
AddHandler application/x-httpd-php53s .php .html
Options +SymLinksIfOwnerMatch
IndexIgnore */*
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^(www.)?mysite.com$
RewriteCond %{REQUEST_URI} !^/mysite/frontend/www
RewriteRule ^(.*)$ /mysite/frontend/www/$1 [L]
答案 2 :(得分:0)
你不需要编辑.htaccess。您只需将Yii条目脚本(index.php)和默认的.htaccess从子目录移动到webroot(以便它们直接驻留在public_html下)。将index.php和.htaccess移动到根目录后,所有Web请求都将直接路由到webroot下的index.php(而不是子目录),从而消除了url的/子目录部分。
移动文件后,您需要编辑index.php以更新对yii.php文件(在Yii框架目录下)以及Yii配置文件(main.php)的引用。最后,您需要将assets目录直接移动到webroot,因为默认情况下,Yii希望assets目录与入口脚本位于同一位置。
这应该是您需要做的所有事情,但如果您需要更多细节,我会在这里完整地描述这种方法: