Yii从URL中删除应用程序目录名称

时间:2012-11-29 23:12:33

标签: mod-rewrite yii appfog

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

我的Yii就像这样设置

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

app文件夹托管yii应用程序

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

如何从网址中删除“app”部分。

我尝试将.htaccess文件移动到webroot文件夹并重定向,但“app”仍会显示在网址中

以下是/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上方的一个目录中。

3 个答案:

答案 0 :(得分:2)

我通过配置如config / main.php和put:

来解决它
'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并再次遇到这个问题

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

我设法将example.com重定向到example.com/app,并从网址中删除了/ 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专家,我想知道你现在是否找到了更好的解决方案?