0
  • 我正在尝试将 Yii 站点设置为从子目录加载到根域。在我的根站点文件夹中,我只有根.htaccess文件和包含 Yii 站点的子目录“ subdir ”。我找到了一个适用于我的本地环境的解决方案:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*) subdir/index.php/$1 [QSA,L]
    

但是当我将网站上传到 HostGator 时,它就无法正常工作,例如

如果我http://localhost/contact在本地环境中使用,则会打开正确的页面(称为站点/联系人 - 站点控制器和联系人操作。我已将 Yii 'contact'=>'site/contact' 规则添加到 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 中的最后一条规则,但不确定如何。谢谢!

4

3 回答 3

1

我找到了可行的替代解决方案。我被迫使用老式的 URL 而不是路径,所以我将 urlManager 更改为:

'urlManager'=>array(
                        //'urlFormat'=>'path',
                        'showScriptName'=>true,
                        'caseSensitive'=>false,
                        'rules'=>array(
                          ...
                         )
                    )

我的根 htaccess 现在看起来像这样:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /subdir/index.php?r=$1 [QSA,L]

所以,当访问

http://mydomain.com/site/contact

实际映射的 URL 是

http://mydomain.com/subdir/index.php?r=site/contact

结果返回正确的联系页面

于 2013-10-14T19:56:48.950 回答
0

Since, you stated in your previous question that www.mysite.com/mysite/frontend/www/controller/action works fine; you should be using:

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]
于 2013-10-11T16:07:17.190 回答
0

您不需要编辑 .htaccess。您只需将 Yii 入口脚本 (index.php) 和默认的 .htaccess 从子目录向上移动到 webroot(以便它们直接位于 public_html 下)。一旦将 index.php 和 .htaccess 移动到根目录,所有的 Web 请求将直接路由到 webroot 下的 index.php(而不是子目录),从而消除了 url 的 /subdirectory 部分。

移动文件后,您需要编辑 index.php 以更新对 yii.php 文件(在 Y​​ii 框架目录下)以及 Yii 配置文件(main.php)的引用。最后,您需要将 assets 目录直接移动到 webroot,因为默认情况下,Yii 期望 assets 目录与入口脚本位于同一位置)。

这应该是您需要做的所有事情,但是如果您需要更多详细信息,我会在此处完整描述该方法:

http://muhammadatt.tumblr.com/post/83149364519/modifying-a-yii-application-to-run-from-a-subdirectory

于 2014-04-20T04:59:50.310 回答