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

Posted

技术标签:

【中文标题】.htaccess 用于使用 Yii 框架的子目录中的站点【英文标题】:.htaccess for site in sub-directory using Yii framework 【发布时间】:2012-04-01 13:58:08 【问题描述】:

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

我的设置是:

使用 Yii 框架 htaccess 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 不起作用:(

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

【问题讨论】:

你可能需要 YII 告诉你基本文件夹在哪里以及它代表哪个 baseurl,但我不是 YII 专家。 您是否尝试添加RewriteLogRewriteLogLevel 以查看发生了什么? 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 文件(在 Y​​ii 框架目录下)以及 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 不起作用,需要其他解决方案

yii框架缓存知识总结(转载)

Yii2框架博客系统前台界面布局

Yii 微框架

php的yii框架