【问题标题】:Yii removing application directory name from URLYii 从 URL 中删除应用程序目录名称
【发布时间】:2012-11-29 23:12:32
【问题描述】:

好吧,这似乎是一个很常见的问题,但我在论坛上找不到明确的解决方案。

我的 Yii 是这样设置的

/webroot/framework
/webroot/app
/webroot/requirements

app 文件夹承载 yii 应用程序

但是我的网址看起来像:site[dot]com/app/site/index

如何从 URL 中删除“应用程序”部分。

我尝试将我的 .htaccess 文件移动到 webroot 文件夹并重定向,但 'app' 仍然显示在 url 中

这里是/webroot/.htaccess的内容

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /

  # need this for AMZN ELB or get a infinite redirect loop 
  RewriteCond %{HTTP:X-Forwarded-Proto} !https
  RewriteCond %{SERVER_NAME} !^localhost$
  RewriteRule (.*) %{HTTP_HOST}%{REQUEST_URI} [L]

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d

  RewriteRule . /app/index.php 
</IfModule>

如果我可以将我的 webroot 更改为 /webroot/app 会很容易,但我无法控制它。感谢您的帮助..

这是在 appfog 上启动的,所以我无法控制 webroot,或者让框架文件夹位于 webroot 上方的一个目录中。

【问题讨论】:

    标签: mod-rewrite yii appfog


    【解决方案1】:

    我通过像 config/main.php 这样的配置来解决它:

    'request'=>array(
            'baseUrl'=>'',
    
        ),
         'urlManager'=>array(
            'baseUrl'=>'',
            'urlFormat'=>'path',
            'showScriptName'=>false,
            'appendParams' => true,
            'rules'=>array(
    
            ),
        ),  'request'=>[
            'baseUrl'=>'',
    
        ],
         'urlManager'=>array(
            'baseUrl'=>'',
            'urlFormat'=>'path',
            'showScriptName'=>false,
            'appendParams' => true,
            'rules'=>array(
    
            ),
        ),
    

    刚回到Yii又遇到这个问题

    【讨论】:

      【解决方案2】:

      也许您可以将所有文件从 /webroot/app 移动到 /webroot/(并将 yii 放在 /webroot/yii)。

      【讨论】:

      • 是的,我认为诀窍只是移动一些文件,所以它不是典型的目录结构。这样做我有点不舒服,但似乎没有更好的解决方案。
      【解决方案3】:

      我发布了similar question。 但是,将“应用程序”内容放在 webroot/ 中不是我的选择,因为我需要它是可移植的,并且在不久的将来我将在 webroot/ 中运行其他“应用程序”在同一个 webroot/框架上。

      我设法将 example.com 重定向到 example.com/app 并从 URL 中删除了 /app 部分。我被重定向到默认控制器/操作。但是,当我单击指向(例如)example.com/site/login 的链接时,它仍然会将我带到默认控制器/操作。

      我的 webroot/.htaccess 看起来像这样:

      RewriteEngine on
      
      RewriteCond $1 !^application/
      # if a directory or a file exists, use it directly
      RewriteCond %{DOCUMENT_ROOT}/application/$1 -f [OR]
      RewriteCond %{DOCUMENT_ROOT}/application/$1 -d
      RewriteRule ^(.*)$ application/$1 [L]
      
      # otherwise forward it to index.php
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{HTTP_HOST} ^(www.)?example.com$
      # RewriteRule ^.*$ application/index.php does not 'remove' the directory with this??
      RewriteRule ^$ application [L]
      

      也许对你有帮助? 由于我不是 .htaccess 专家,我想知道您现在是否找到了更好的解决方案?

      【讨论】:

        猜你喜欢
        • 2011-09-26
        • 1970-01-01
        • 2013-08-09
        • 2013-10-31
        • 2019-06-19
        • 2020-05-11
        • 1970-01-01
        相关资源
        最近更新 更多