gpt4 book ai didi

php - Yii2 htaccess - 如何完全隐藏前端/web 和后端/web

转载 作者:IT王子 更新时间:2023-10-29 01:11:49 26 4
gpt4 key购买 nike

我想我已经很接近了。我将 htaccess 重定向到网站 (frontend/web) 和 /admin 路径 (backend/web)。网站看起来不错,CSS 文件加载等。

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

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

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

我需要什么:我希望整个网站在不显示前端/后端链接的情况下运行。项目的根应该(不可见地)从 frontend/web 中提取而不显示它。所以 http://localhost/yii2app/运行我的整个前端,http://localhost/yii2app/admin/运行我的整个后端。

为什么?我觉得这种设置在服务器上运行时会非常可靠和优雅。我希望能够将我的项目文件夹实时推送到一个站点,并且它工作得很好,而不必使用黑客来处理本地与服务器。

.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/admin加载 backend/web 并仅显示 http://localhost/yii2app/admin .显然,它们会附加各自的 controller/action。所以管理员可能看起来像 http://localhost/yii2app/admin/site/login

注意:我没有玩过任何文件。这是一个股票 yii2 高级设置,使用 Composer ,并遵循文档。到目前为止,我唯一玩过的是提到的 htaccess 文件。

谢谢!

最佳答案

尝试使用 .htaccess 方法 -

第一步

在根文件夹中创建 .htaccess 文件,即 advanced/.htaccess并编写下面的代码。

Options +FollowSymlinks
RewriteEngine On

# deal with admin first
RewriteCond %{REQUEST_URI} ^/(admin) <------
RewriteRule ^admin/assets/(.*)$ backend/web/assets/$1 [L]
RewriteRule ^admin/css/(.*)$ backend/web/css/$1 [L]

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


RewriteCond %{REQUEST_URI} ^/(assets|css) <------
RewriteRule ^assets/(.*)$ frontend/web/assets/$1 [L]
RewriteRule ^css/(.*)$ frontend/web/css/$1 [L]
RewriteRule ^js/(.*)$ frontend/web/js/$1 [L]
RewriteRule ^images/(.*)$ frontend/web/images/$1 [L]

RewriteCond %{REQUEST_URI} !^/(frontend|backend)/web/(assets|css)/ <------
RewriteCond %{REQUEST_URI} !index.php
RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ frontend/web/index.php

注意:如果您在本地服务器上尝试,请替换 ^/^/project_name/你在哪里看到箭头标志。删除那些箭头标志 <------设置完成后。

第 2 步

现在创建一个 components/Request.php common 目录中的文件,并在此文件中写入以下代码。

namespace common\components;


class Request extends \yii\web\Request {
public $web;
public $adminUrl;

public function getBaseUrl(){
return str_replace($this->web, "", parent::getBaseUrl()) . $this->adminUrl;
}


/*
If you don't have this function, the admin site will 404 if you leave off
the trailing slash.

E.g.:

Wouldn't work:
site.com/admin

Would work:
site.com/admin/

Using this function, both will work.
*/
public function resolvePathInfo(){
if($this->getUrl() === $this->adminUrl){
return "";
}else{
return parent::resolvePathInfo();
}
}
}

第 3 步

正在安装组件。在 frontend/config/main.php 中写入以下代码和 backend/config/main.php文件分别。

//frontend, under components array
'request'=>[
'class' => 'common\components\Request',
'web'=> '/frontend/web'
],
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
],

// backend, under components array
'request'=>[
'class' => 'common\components\Request',
'web'=> '/backend/web',
'adminUrl' => '/admin'
],
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
],

第 4 步(可选,如果在第 3 步之前不起作用)

在 web 目录中创建 .htaccess 文件

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]

注意:确保你已经在 apache 中启用了你的 mod 重写

就是这样!您可以使用
尝试您的项目 www.project.com/admin , www.project.com

在本地服务器
localhost/project_name/admin , localhost/project_name

关于php - Yii2 htaccess - 如何完全隐藏前端/web 和后端/web,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28118691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com