.htaccess 用于使用 Yii 框架的子目录中的站点
Posted
技术标签:
【中文标题】.htaccess 用于使用 Yii 框架的子目录中的站点【英文标题】:.htaccess for site in sub-directory using Yii framework 【发布时间】:2012-04-01 13:58:08 【问题描述】:我查看了几个子目录中网站的 htaccess 配置示例,并尝试了其中的大多数但没有 100% 成功。
我的设置是:
使用 Yii 框架 htaccesspublic_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 不起作用:(
任何帮助将不胜感激!谢谢!
【问题讨论】:
你可能需要 YII 告诉你基本文件夹在哪里以及它代表哪个 baseurl,但我不是 YII 专家。 您是否尝试添加RewriteLog
和RewriteLogLevel
以查看发生了什么? httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritelog
@hakre,Yii 应用程序的 basePath(如果这就是你的意思)设置为 Yii::getPathOfAlias('site.frontend')
,这意味着 public_html/mysite/frontend/。我也尝试将 RewriteBase 添加到 /mysite
和 /mysite/frontend/www
,但没有任何改变。
@JamesHolwell 我还没有尝试过,但我会在今天晚些时候回到我的机器中时尝试一下。谢谢! :)
【参考方案1】:
我也没有更新.htaccess
文件,更容易修改子域的httpd.conf
虚拟主机并更改DocumentRoot
指向你的yii文件夹。
【讨论】:
【参考方案2】:您不需要编辑 .htaccess。您只需将 Yii 入口脚本 (index.php) 和默认的 .htaccess 从子目录移动到 webroot (以便它们直接位于 public_html 下)。一旦你将 index.php 和 .htaccess 移动到根目录,所有的 web 请求都将直接路由到 index.php(而不是子目录),从而消除了 url 的 /subdirectory 部分。
移动文件后,您需要编辑 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】:我发现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 中的查询字符串。
【讨论】:
这在我的本地环境中效果很好,但由于某种原因不适用于 Hostgator。【参考方案4】:你没有提到你是否为干净的 URL 配置了 Yii 的 URL 管理器。你需要这样做,否则 Yii 期望“路由”显示为名为“r”的 GET 参数。如果没有,请咨询this section of the definitive guide
【讨论】:
是的,我使用的是干净的 URL。urlFormat'=>'path'
和 'showScriptName'=>false
。所以那边一切看起来都很好。以上是关于.htaccess 用于使用 Yii 框架的子目录中的站点的主要内容,如果未能解决你的问题,请参考以下文章
在 Yii2 .htaccess 中将 http 重定向到 https
Yii2 301 从原始 url 重定向到 .htaccess 中对 SEO 友好的 url 不起作用,需要其他解决方案