Yii框架,如何为后端定义url

Yii框架,如何为后端定义url,yii,url-routing,Yii,Url Routing,我正在使用yii框架开发一个CMS。有前端和后端。我希望用户能够像这样访问后端:,现在它是这样工作的: 对于后端,我用自己的配置、控制器和。。。以及访问admin.php中后端的页面 以下是我的目录结构: ... admin --components --config ---main.php --controllers ---NewsController.php ---ShowCOntroller.php

我正在使用yii框架开发一个CMS。有前端和后端。我希望用户能够像这样访问后端:,现在它是这样工作的:

对于后端,我用自己的配置、控制器和。。。以及访问admin.php中后端的页面

以下是我的目录结构:

...
admin
     --components
     --config
         ---main.php
     --controllers
         ---NewsController.php
         ---ShowCOntroller.php
         ---SiteController.php
     --models
         ---LoginForm.php
         ---News.php
         ---Show.php
         ---User.php
     --runtime
     ...
     --Views
        ---layouts
        ---news
        ---show
        ---site

protected

    -commands
    -data
    -extentions
    -messages
    -migrations
    -models
    -modules
       --image
    -runtime
    -views


themes
uploads
admin.php
index.php
.htaccess  
这是我的.htaccess文件:

Options +FollowSymLinks
IndexIgnore */*
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule admin admin\.php [T=application/x-httpd-php]

 # 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
</IfModule>
Options+FollowSymLinks
IndexIgnore*/*
重新启动发动机
重写基/
重写规则admin\.php[T=application/x-httpd-php]
#如果存在目录或文件,请直接使用它
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
#否则将其转发到index.php
重写规则。index.php

<>代码>你可以考虑的是在前端创建后端。模块就像应用程序中的应用程序。您将创建模型、控制器和视图,可能会重用前端的代码。用于访问模块的URL将包括模块名称;比如说

另一方面,如果您只想将请求映射到
/admin
,请转到脚本
admin.php
,您可以在mod_rewrite中完成。例如:

# .htaccess
RewriteEngine On

RewriteRule ^admin admin.php     # route requests for /admin to admin.php

# Rest of Yii's rewrite rules:
# 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

您确实需要通过index.php引导所有请求


使用URL管理器路由管理员请求。看看这里,

你可以看看我是如何在@bool.dev的帮助下解决的


我希望它能有所帮助。

我建议您使用Yii模块基础概念。因此,管理页面将是应用程序中的一个模块


请参阅此链接使用yii Url管理器,这是最好的,如果后端的所有配置和控制器都不同,那么您可以使用命名的AdminController构建一个控制器。

我还建议使用模块方式


然后,您可以使用URL管理器为管理员管理URL。

通常,yii页面有一个类似/index.php?r=some/thing的路由。你怎么能有“admin.php”页面呢?我试着使用重写模式,但没有成功。这是我的htaccess:
RewriteRule上的RewriteEngine^admin admin.php RewriteCond%{REQUEST_FILENAME}-f RewriteCond%{REQUEST_FILENAME}-重写规则。index.php
根据您的设置,您可能需要其他设置,例如
RewriteBase/
。您可以发布您的目录结构和.htaccess的内容吗?好的,我刚签出,我的目录结构不同,后端部分在受保护的目录中。我把我的目录结构改成了你的。现在我又犯了一个错误。现在它识别出/admin而不是admin.php,但它给了我这个错误:错误404-无法解析请求“admin”。这是因为Yii试图在受保护的服务器中找到一个管理控制器。如果您发布.htaccess的内容和目录结构的草图,会更容易。我将结构改回原来的样子,因为我希望管理部分也受到内部保护。我用我的目录结构编辑了我的文章。但是为什么你决定把后端放在保护区之外呢?这不会导致安全问题吗?问题是我是Yii的新手,你链接中的教程不是很全面。我找不到任何其他教程能更好地解释我应该如何做。我正在使用UrlManager,但您能更具体地说明我应该在UrlManager中定义什么吗?您可以为后端使用不同的控制器,如AdminCotroller,并仅为管理员用户定义对操作的访问控制。在我的方法中,我将定义一个用户组件变量,该变量将标识管理员用户。然后管理员用户可以访问管理员控制器操作。是的,我还决定为此使用模块。我的方法不是很有效。。。