.htaccess使用Yii框架在子目录中的站点

时间:2012-03-16 00:34:07

标签: php .htaccess url yii vhosts

我已经查看了几个子目录中网站的htaccess配置示例,并尝试了大部分内容而没有100%成功。

我的设置是:

  • 使用Yii框架
  • htaccess at public_html/.htaccess
  • 位于public_html/mysite目录
  • 内的网站
  • 索引处理位于public_html/mysite/frontend/www/index.php
  • 的所有请求

网址的状态

  • 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不起作用:(

任何帮助都会非常感激!谢谢!

4 个答案:

答案 0 :(得分:4)

我发现this similar question的答案很有帮助。以下是我的重写规则的最终结果:

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

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

答案 1 :(得分:0)

您没有提及是否为Yii的Url Manager配置了干净的URL。你需要,否则Yii希望“路线”显示为名为“r”的GET参数。如果您没有,请咨询this section of the definitive guide

答案 2 :(得分:0)

你不需要编辑.htaccess。您只需将Yii条目脚本(index.php)和默认的.htaccess从子目录移动到webroot(以便它们直接驻留在public_html下)。将index.php和.htaccess移动到根目录后,所有Web请求都将直接路由到index.php(而不是子目录),从而消除了url的/子目录部分。

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

这应该是您需要做的所有事情,但如果您需要更多细节,我会在这里完整地描述这种方法:

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

答案 3 :(得分:0)

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