【问题标题】:Redirection using Routing not working in yii2使用路由的重定向在 yii2 中不起作用
【发布时间】:2019-10-01 09:06:04
【问题描述】:

我有ProjectsController.php,其中有actionIndex

frontend/config/main.php 的 main.php 文件中,我已经完成了如下路由。

 'components' => [
    'urlManager' => [
        'showScriptName' => false,
        'enablePrettyUrl' => true,
        'rules' => [
            'projects'=>'projects/index',
         ],
       ],  
     ]

这意味着我正在尝试使用 url /projects 重定向到项目控制器中的索引操作。我可以像localhost/myproject/projects一样在我的本地主机中访问,但是当我尝试像www.myproject/projects/一样在现场访问时,它会重定向到主页,如果我尝试像www.myproject/frontend/web/projects/index一样访问,那么我可以重定向到正确的页面。不仅这个特定的动作和控制器,main.php 中提到的所有其他路由都重定向到主页。

下面是我的根文件'/'中的.htaccess文件代码

    # prevent directory listings
#Options -Indexes
#IndexIgnore */*

# follow symbolic links
#Options FollowSymlinks
RewriteEngine on
#RewriteCond %{REQUEST_URI} ^/common/css/
#RewriteRule ^common/css/(.*)$ common/css/$1 [L]
#RewriteCond %{REQUEST_URI} ^(?!.*/web/)
#RewriteCond %{REQUEST_URI} !^/web/
#RewriteRule .* backend/web/index.php [L]
#RewriteCond %{REQUEST_URI} ^(?!.*/web/)
#RewriteRule ^(.*)?$ backend/web/$1 [L,PT]

#RewriteCond %{REQUEST_URI} !^/frontend/web/
#RewriteRule backend/(.*)$ backend/web/index.php [L]
#RewriteRule ^frontend/(.*)$ frontend/web/$1 [L]
#RewriteBase /
RewriteRule ^common/(.*)$      common/$1   [QSA,L,NC]
RewriteRule ^frontend/images/(.*)$      frontend/images/$1   [QSA,L,NC]
RewriteRule ^(.*)$      frontend/web/index.php/$1   [QSA,L,NC] 

#RewriteCond %{REQUEST_URI} ^frontend/(assets|css|js|images|themes)
#RewriteRule ^frontend/images/(.*)$      frontend/images/$1   [QSA,L,NC]

#RewriteCond %{REQUEST_URI} ^/frontend/web/projects/$
#RewriteRule frontend/projects/(.*)$ frontend/web/index.php/projects/$ [L]
#RewriteCond %{REQUEST_URI} ^(?!.*/themes/)

#RewriteCond %{REQUEST_URI} ^/(assets|js|images|themes|uploads)
#RewriteRule ^themes/(.*)$ backend/web/themes/$1 [L]
#RewriteRule ^images/(.*)$ backend/images/$1
#RewriteRule ^css/(.*)$ backend/web/css/$1 [L]



#RewriteRule ^(.*)?$ backend/themes?$ [L,PT]
#RewriteRule ^(.+)?$ frontend/web/$1
#
#RewriteCond %{REQUEST_URI} !^/backend/(assets|css|themes)/
#RewriteRule .* backend/themes/$1 [L]  

#Options -Indexes
#RewriteEngine on


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

#RewriteCond %{REQUEST_URI} ^/(assets|css|js|images|themes)
#RewriteRule ^assets/(.*)$ backend/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]
#RewriteRule ^themes/(.*)$ frontend/web/themes/$1 [L] 

下面是来自/frontend/web/.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

请帮忙。我无法解决这个问题。我实际上无法理解原因。

【问题讨论】:

  • 你使用的是什么服务器?
  • .htaccess 文件的路径是什么?你的 common/main.php 文件中也有 urlManager 组件吗?
  • @MAZ 不,我在 common/main.php 中没有 urlManager 我上面提到的 .htacces 代码来自我的根文件,即“/”。我还编辑了我的查询并添加了 frontend/web/.htaccess 的 .htacces 文件
  • @KandarpPatel 我正在使用 Godaddy 服务器

标签: yii yii2 yii2-advanced-app yii-routing


【解决方案1】:

您需要创建两个.htaccess。一个在您的项目根文件夹中,另一个在您的 frontend/web 文件夹中。

请按照此问题的 Anant Singh 的answer 的步骤进行操作。

Yii2:-Pretty URL's are formed, but not working (says 404 “NOT FOUND”)

我希望它会有所帮助。

【讨论】:

    【解决方案2】:
    RewriteRule ^(.*)$      frontend/web/index.php/$1   [QSA,L,NC] 
    

    在你的根 .htaccess 中将上述规则更改为

    RewriteRule ^(.*)$      frontend/web/$1   [L,NC] 
    

    【讨论】:

    猜你喜欢
    • 2013-01-15
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 2015-08-10
    • 2019-01-19
    • 2016-11-27
    • 1970-01-01
    相关资源
    最近更新 更多