【问题标题】:.htaccess for site in sub-directory using Yii framework.htaccess 用于使用 Yii 框架的子目录中的站点
【发布时间】: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 我还没有尝试过,但我会在今天晚些时候回到我的机器中时尝试一下。谢谢! :)

标签: php .htaccess url yii vhosts


【解决方案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。所以那边一切看起来都很好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-06
      相关资源
      最近更新 更多