Php .htaccess使用Yii框架访问子目录中的站点

Php .htaccess使用Yii框架访问子目录中的站点,php,.htaccess,url,yii,vhosts,Php,.htaccess,Url,Yii,Vhosts,我已经看了几个子目录中网站的htaccess配置示例,并尝试了其中大多数,但没有100%成功 我的设置是: 使用Yii框架 htaccess位于public\u html/.htaccess 网站位于public\u html/mysite目录中 索引处理位于public\u html/mysite/frontend/www/index.php的所有请求 URL的状态: www.mysite.com工作正常[ok] www.mysite.com/controller/action显示主页[

我已经看了几个子目录中网站的htaccess配置示例,并尝试了其中大多数,但没有100%成功

我的设置是:

  • 使用Yii框架
  • htaccess位于
    public\u html/.htaccess
  • 网站位于
    public\u html/mysite
    目录中
  • 索引处理位于
    public\u html/mysite/frontend/www/index.php的所有请求
URL的状态

  • www.mysite.com
    工作正常[ok]
  • www.mysite.com/controller/action
    显示主页[错误]
  • www.mysite.com/mysite/frontend/www/controller/action
    工作正常[错误,应改为使用上面的项目]
目前我的.htaccess如下所示:

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/index.php [L]
我已经尝试了一切,但我不知道为什么www.mysite.com/controller/action不起作用:(


任何帮助都将不胜感激!谢谢!

您没有提到是否已将Yii的Url管理器配置为干净的Url。您需要这样做,否则Yii希望“路由”显示为名为“r”的GET参数。如果您没有这样做,请咨询我发现答案很有帮助。以下是我的重写规则的最终结果:

#Forward all non-existent files/directories to Yii
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) subdir/index.php/$1 [QSA,L]

这将获取所有不存在的文件/文件夹,并将它们发送到附加初始url的yii脚本。QSA将附加初始url中可能存在的任何查询字符串。

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

移动文件后,需要编辑index.php以更新对yii.php文件(在yii framework目录下)以及yii config文件(main.php)的引用。最后,您需要将资产目录直接移动到webroot,因为默认情况下,Yii希望资产目录与条目脚本位于同一位置)

这应该是您需要做的全部工作,但如果您需要更多详细信息,我将在这里详细介绍该方法:


我也没有更新
.htaccess
文件,更容易修改子域的
httpd.conf
虚拟主机,并更改
DocumentRoot
以指向您的yii文件夹。

您可能需要yii告诉basefolder在哪里以及它代表哪个baseurl,但我不是yii专家。您尝试过添加
Rewri吗teLog
RewriteLogLevel
查看发生了什么事?@hakre,Yii应用程序基本路径(如果这是您的意思)设置为
Yii::getPathOfAlias('site.frontend'))
,意思是public_html/mysite/frontend/。我也尝试过将RewriteBase添加到
/mysite
/mysite/frontend/www
,但没有任何改变。@JamesHolwell我还没有尝试过,但今天回到我的机器后我会尝试一下。谢谢!:)是的,我正在使用干净的URL
urlFormat'=>path'
'showScriptName'=>false
。所以在这方面一切看起来都很好。这在我的本地环境中非常有效,但由于某些原因,它不适用于Hostgator。