Yii 2.0从URL中隐藏/ basic / web以及index.php

时间:2014-11-27 20:37:08

标签: php .htaccess yii url-rewriting yii2

网上有很多关于如何从你的Yii 2.0应用程序URL隐藏index.php的信息,但是,我在这里要做的就是从URL中删除'/ basic / web /'。 / basic / web是运行应用程序的目录,到目前为止我的配置如下。这进入配置文件:

'urlManager' =>[
            'enablePrettyUrl' => true,
            'showScriptName' => false,
        ],

这是我在/ web文件夹中的htaccess文件:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

到目前为止,非常好,我可以访问直接调用mysite.com/basic/web/controller/action的内容。虽然要删除/ basic / web以使URL变得简单mysite.com/controller/action,但我需要做什么?

欢迎任何提示,谢谢!

编辑:我正在寻找一种不触及apache配置文件的方法,因为我无法访问它。

3 个答案:

答案 0 :(得分:7)

RewriteEngine on
# Change yourdomain.com to be your primary domain.

RewriteCond %{HTTP_HOST} ^(www.)?yourdomain.com$

RewriteCond %{REQUEST_URI} !^/basic/web/

# Don't change this line.
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ /basic/web/$1

RewriteCond %{HTTP_HOST} ^(www.)?yourdomain.com$ 
RewriteRule ^(/)?$ basic/web/index.php [L]

完成后,将.htaccess权限更改为440。没有什么可以担心使用这种方法,与Mihai P所说的相反。

答案 1 :(得分:5)

您应该以另一种方式定义您的apache配置。您的网站应指向{folder} / basic / web,而不是{folder}。

因为您更改了要求:

对于cpanel设置,您应该:
1)删除愚蠢的基本文件夹,无论如何它是什么意思?只是因为Yii安装这种方式并不意味着你必须保留它。所以将所有内容都提升1级 2)将web重命名为public_html,确保在某些文件中重命名它(想到config / bootstrap)。

是的,您可以使用.htaccess执行此操作,但是您不应该将文件暴露给互联网,只是应该公开您的网络文件夹,因此我不会给您解决方案,因为它不是一个好的。

答案 2 :(得分:1)

工作解决方案就在这里!

步骤1.在yii2基本应用程序目录中创建一个index.php文件并填写如下

<?php

// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require __DIR__ . '/vendor/autoload.php';
require __DIR__ . '/vendor/yiisoft/yii2/Yii.php';

$config = require __DIR__ . '/config/web.php';

(new yii\web\Application($config))->run();

步骤2.在同一个基本目录中创建一个.htaccess文件,如下所示

RewriteEngine on
# If a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward it to index.php
RewriteRule . index.php