我看了几个子目录中网站的htaccess配置示例,并尝试了其中大多数,但没有100%成功。
我的设置是:
- 使用Yii框架
- htaccess在
public_html/.htaccess
- 位于
public_html/mysite
目录内的站点 - 处理位于
public_html/mysite/frontend/www/index.php
的所有请求的索引
URL的状态:
www.mysite.com
工作良好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不起作用:(
任何帮助都将不胜感激!谢谢
我发现这个类似问题的答案很有帮助。以下是我的重写规则的结果:
#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中的查询字符串。
您没有提到是否为干净的Url配置了Yii的Url管理器。您需要,否则Yii希望"route"显示为名为"r"的GET参数。如果您没有,请参阅权威指南的这一部分
您不需要编辑.htaccess。您只需要将Yii条目脚本(index.php)和默认的.htacccess从子目录向上移动到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
我也没有更新.htaccess
文件,更容易修改子域的httpd.conf
虚拟主机,并将DocumentRoot
更改为指向您的yii文件夹。