【问题标题】:Yii 2.0 hiding /basic/web from the URL along with the index.phpYii 2.0 从 URL 中隐藏 /basic/web 以及 index.php
【发布时间】:2015-01-26 12:07:44
【问题描述】:

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

【问题讨论】:

标签: php .htaccess yii url-rewriting yii2


【解决方案1】:

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

因为你改变了要求:

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

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

【讨论】:

  • 如果我无权访问 apache 配置文件,有没有办法只通过 .htaccess 文件来实现?
  • 这是 Cpanel 设置还是类似的设置?这是在实时服务器上吗?
  • 它是共享主机环境,不允许编辑配置文件。我确实可以选择请求他们的支持添加一些自定义代码,但如果我必须为每个应用程序都这样做,那将变得非常麻烦。
  • 不幸的是,它不是 cpanel,但根据您的建议,我想我可以只使用 URL 中的“/web”,甚至可以将其重命名为更合适的名称。
  • 我还没有见过不允许你做我描述的事情的托管公司。如果您确实知道一个动作,因为您将在未来有更多时间绕过愚蠢的限制。
【解决方案2】:
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 所说的相反,使用这种方法没什么好怕的。

【讨论】:

  • 我实际上认为“不鼓励使用 .htaccess 文件,因为它们会对服务器性能产生不利影响。仅在必要时使用它们。”来源:wiki.apache.org/httpd/Htaccess。即使他无法使用 .htaccess 文件,当您可以像我说的那样做时,为什么还要在其中添加另一个条件?这不是一个更好的做法(只暴露 1 个文件)然后你的建议?这就是为什么 Yii、Laravel 等有 1 个文件夹暴露在互联网上而不是它们的整个应用程序文件夹的原因。无论如何只是我的 2c,我宁愿教育而不是回答错误的问题。
【解决方案3】:

有效的解决方案就在这里!

步骤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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2015-01-21
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    相关资源
    最近更新 更多