Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Yii 2.0从URL和index.php隐藏/basic/web_Php_.htaccess_Yii_Url Rewriting_Yii2 - Fatal编程技术网

Yii 2.0从URL和index.php隐藏/basic/web

Yii 2.0从URL和index.php隐藏/basic/web,php,.htaccess,yii,url-rewriting,yii2,Php,.htaccess,Yii,Url Rewriting,Yii2,网上有很多关于如何从Yii 2.0应用程序URL中隐藏index.php的信息,但是,我在这里尝试的是从URL中删除“/basic/web/”/basic/web是运行应用程序的目录,到目前为止,我的配置如下。这将进入配置文件: 'urlManager' =>[ 'enablePrettyUrl' => true, 'showScriptName' => false, ], 这是我在/web文件夹中的htacce

网上有很多关于如何从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配置文件的方法,因为我无法访问它。

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

因为您更改了要求:

对于cpanel设置,您应该:
1) 删除愚蠢的基本文件夹,它到底有什么意义?Yii以这种方式安装并不意味着你必须保留它。因此,将所有内容向上移动1级。
2) 将web重命名为public_html,确保在某些文件中也对其进行重命名(我想到的是config/bootstrap)

是的,你可以用.htaccess来做,但是你不应该让文件暴露在互联网上,只应该暴露你的web文件夹,所以我不会给你这个解决方案,因为它不是一个好的解决方案

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.所述相反。

有效的解决方案就在这里

第一步。在yii2basic应用程序目录中创建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();

如果我没有访问apache配置文件的权限,有没有办法只通过.htaccess文件来完成?这是Cpanel设置还是类似的设置?这是在实时服务器上吗?它是不允许编辑配置文件的共享托管环境。我可以选择向他们的支持部门请求添加一些自定义代码,但如果我必须为每个应用程序添加自定义代码,这将成为一个非常麻烦的过程。不幸的是,这不是一个cpanel,但根据您的建议,我想我可以只使用URL中的“/web”,甚至可以将其重命名为更合适的名称。我还没有见过一家托管公司不允许您执行我所描述的操作。如果你知道一个动作,你将在未来释放更多的时间来绕过愚蠢的限制。可能的重复:看到这一点,让我编辑我的问题,因为我没有访问apache配置文件的权限,所以我正在寻找解决办法。我真的认为“不鼓励使用.htaccess文件,因为它们可能会对服务器性能产生有害影响。只有在必要时才使用它们。”来源:。即使他无法使用.htaccess文件,为什么要在其中添加另一个条件,而你可以像我说的那样这样做?这不是一个更好的做法吗(只公开了一个文件)那么你的建议是什么?这就是为什么Yii、Laravel等有一个文件夹暴露在互联网上,而不是他们的整个应用程序文件夹的原因。总之,我只是2c,我宁愿接受教育,也不愿回答错误的问题。
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