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

Mod rewrite Yii从URL中删除应用程序目录名,mod-rewrite,yii,appfog,Mod Rewrite,Yii,Appfog,好吧,这似乎是一个相当普遍的问题,但我无法在论坛上找到一个明确的解决方案 我的Yii是这样设置的 /webroot/framework /webroot/app /webroot/requirements 应用程序文件夹承载yii应用程序 但是,我的url看起来像:site[dot]com/app/site/index 如何从URL中删除“应用程序”部分 我尝试将.htaccess文件移动到webroot文件夹,它会重定向,但“app”仍然显示在url中 以下是/webroot/.htacce

好吧,这似乎是一个相当普遍的问题,但我无法在论坛上找到一个明确的解决方案

我的Yii是这样设置的

/webroot/framework
/webroot/app
/webroot/requirements
应用程序文件夹承载yii应用程序

但是,我的url看起来像: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之上的一个目录中

可能是您可以将所有文件从/webroot/app移动到/webroot/并将yii放置在/webroot/yii。

可能是您可以将所有文件从/webroot/app移动到/webroot/并将yii放置在/webroot/yii。

我发布了一篇文章。 但是,将“应用程序”内容放在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专家,我想知道您现在是否找到了更好的解决方案?

我发布了一个。 但是,将“应用程序”内容放在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专家,我想知道您现在是否找到了更好的解决方案?

我通过像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并再次面对这个问题

我通过像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,再次面临这个问题

是的,我认为关键在于移动一些文件,所以它不是典型的目录结构。我觉得这样做有点不舒服,但似乎没有更好的解决方案。是的,我认为诀窍就是移动一些文件,所以它不是典型的目录结构。这样做我有点不舒服,但似乎没有更好的解决办法。