当前位置: 首页 > 面试题库 >

Yii2 htaccess-如何完全隐藏前端/网络和后端/网络

诸葛绍元
2023-03-14
问题内容

我想我很近。我将htaccess重定向到网站(前端/网络)和/admin路径(backend/web)。该网站看起来不错,正在加载CSS文件等。

如果您访问以下网址:http:// localhost / yii2app
/
-它会加载主页,并且不会在地址栏中重定向,但该页面会在所有URL中显示frontend /
web。

如果您访问以下网址:http:// localhost / yii2app /
admin- 它会加载后端登录页面,但是会立即重定向到地址栏中的/ backend /
web / site / login(丑陋)。

问题:frontend/backend路径显示在URL(地址栏和页面上的链接)中。

我需要的是:我希望整个站点在不显示前端/后端链接的情况下运行。项目的根目录应该从(无形中)拉出frontend/web而不显示它。.因此,http://
localhost / yii2app /运行我的整个前端,而http:// localhost
/ yii2app / admin /运行我的整个后端。

为什么?我觉得当安装在服务器上时,此设置将非常牢固且优雅。我希望能够将我的项目文件夹实时推送到站点,并且可以正常工作而不必使用黑客来处理本地vs服务器。

.htaccess目录中的文件/yii2app

Options -Indexes
RewriteEngine on

<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_URI} !^/backend/web/(assets|css)/
    RewriteCond %{REQUEST_URI} admin
    RewriteRule .* backend/web/index.php [L]

    RewriteCond %{REQUEST_URI} !^/(frontend|backend)/web/(assets|css)/
    RewriteCond %{REQUEST_URI} !admin
    RewriteRule .* frontend/web/index.php [L]
</IfModule>

现在在前端和后端Web目录中,它们都具有相同的内容.htaccess

RewriteEngine on

# if a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward the request to index.php
RewriteRule . index.php

我不想见/frontend/web/backend/web永远:)

我试图在根目录的htaccess中使用RewriteRule来添加/admin到URL,但是它一直告诉我/admin不存在。我 知道
它不存在,并且我不希望它存在。我希望它是一个相对路径。即:/ admin == / backend / web。

换种说法。我将加载项目根目录(http:// localhost / yii2app
/)中的所有内容frontend/web,但未显示它。另外,要加载http://
localhost / yii2app /
adminbackend/web并仅显示http:// localhost /
yii2app /
admin。显然,他们将拥有各自的controller/action依附。因此管理员看起来像http://
localhost / yii2app / admin / site /
login

注意:我尚未播放任何文件。这是一个基于yii2的高级设置,使用composer并遵循了文档。到目前为止,我唯一玩过的就是提到的htaccess文件。

谢谢!


问题答案:

如果您的唯一目标是即使根本不使用.htaccess规则也不会看到/frontend/web/backend/web,则可以执行以下操作:

为什么不只是拉出web文件夹的内容并将其放在根目录中呢?只需在输入脚本中参考框架和配置文件来调整路径即可index.php

您的目录结构如下所示:

- yii2app/
    - frontend/
    - backend/
    - common/
    - .. other folders..
    - admin/
        - assets/
        - css/
        - index.php
    - assets/
    - css/
    - index.php

您的yii2app/index.php样子如下:

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');
require(__DIR__ . '/common/config/bootstrap.php');
require(__DIR__ . '/frontend/config/bootstrap.php');

$config = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . '/common/config/main.php'),
    require(__DIR__ . '/common/config/main-local.php'),
    require(__DIR__ . '/frontend/config/main.php'),
    require(__DIR__ . '/frontend/config/main-local.php')
);

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

yii2app/admin/index.php将看起来像:

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');
require(__DIR__ . '/../common/config/bootstrap.php');
require(__DIR__ . '/../backend/config/bootstrap.php');

$config = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . '/../common/config/main.php'),
    require(__DIR__ . '/../common/config/main-local.php'),
    require(__DIR__ . '/../backend/config/main.php'),
    require(__DIR__ . '/../backend/config/main-local.html" target="_blank">php')
);

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

编辑:您的输入脚本可能看起来与我的不同,但是您应该想到更改路径以使用这些示例查找框架文件的想法。



 类似资料:
  • 多益网络前端二面,问了半个小时场景题,后二十分钟一道算法,八股一道没考,崩不住了#前端##23届找工作求助阵地#

  • 我知道这个问题以前被问过,但没有得到准确的解决方案。我想从我的活动中隐藏ActionBar和NavigationBar,或者为了使其全屏。我尝试了下面的代码在我的活动创建方法,但它显示动作栏几秒钟,而不是让它全屏。在银河S3(Android4.3),它甚至超过一秒钟。所以我怎么能让它完全不可见,我的活动完全从一开始就像全屏一样。我看到许多应用程序只在S3上运行,但它们没有动作栏,甚至没有几秒钟。

  • 上午十一点,40min 实习项目中学习到什么,写了几个组件,项目中网络缓存如何配置的,难点是什么如何解决的,实习的技术选型有点奇怪,当时问了吗 前端中一般要求首屏资源加载(html、css、js)经过webpack打包后要求为14kb?为什么?  答:首屏响应时间不能过长,说这是表层原因,深层原因是啥???主要是tcp的慢启动算法,第一次连接的时候,不知道网络可以传输多少数据,一般就是10tcp数

  • HTTPS的工作原理 以百度为例 在百度的服务器端首先使用非对称加密算法生成一个秘钥对 百度将自己的公钥发给 CA 证机构,CA 进行签名,生成证书 客户端访问百度的时候,百度将生成的证书发给客户端 浏览器对收到的证书进行认证 客户端确认证书没有问题后,将百度公钥从证书中取出来 这样我们就得到了百度的公钥 在客户端生成一个随机数,使用百度的公钥进行加密,发给服务器 服务器端使用私钥解密,得到了随机

  • 7.15写的测评题,8.5笔试。 15道单选题,4道填空题,4道简答题。基本上都是算法、数据机构、操作系统、Java的八股,难度不大。 一道编程题,经典爬楼梯,但是用不来他的编辑器,一直在报错,就没管了 #秋招#

  • 相比一面对八股文的深挖,二面更多的是对项目的深挖,问了很多项目投产的问题 项目相关(10min): (1)自我介绍,介绍项目 (2)项目中的难点和解决办法 (3)多组件嵌套,登录模块,密码加密方式【这里说到项目用的HTTP,问我为什么不用HTTPS,哎 八股文问题(10min): (1)浏览器缓存,你的项目是怎么部署的,怎么配置缓存策略的 (2)项目编译之后一般有哪些文件,css和js文件为什么通