【问题标题】:Duplicate content issue due to Codeigniter controllers由于 Codeigniter 控制器导致的重复内容问题
【发布时间】:2020-03-09 11:22:47
【问题描述】:

我正在协助一个 Codeigniter 网站,但没有相关背景。已经注意到存在重复的页面内容。当我深入研究时,它们不是实际的页面,而是指向相同视图的控制器。我试图在网站根目录下的 .htaccess 文件中设置 301 重定向,但没有成功。在 application/config/routes.php 中,注释如下:

    $route['default_controller'] = 'Home';
    $route['404_override'] = 'Home';

例如,有一个页面http://mywebsite.com/weddings,然后http://mywebsite.com/Home/weddings 是另一个指向同一个视图的控制器。在删除指向它的附加控制器后,我试图从 Home/weddings 添加 301 重定向,但现在 Home/weddings 只是重定向到主页,因为它设置了 404 覆盖。我希望我已经提供了足够的信息来提供一些帮助。

.htaccess 文件:

    RewriteEngine On
RewriteBase /


# add trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [R=301,L]

# allow access to certain directories in webroot
RewriteCond $1 
!^(index\.php|robots\.txt|css/|lib/|js/|images/|^(.*)/images)

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

# page redirects
RedirectMatch 301 ^Home/weddings/$ /weddings

Home.php如下:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Home extends CI_Controller {

public function __construct() {
    parent::__construct();
    $this->load->model('Admin_model');
    $this->load->model('Home_model');
    $this->load->helper('captcha');
    $this->load->library('recaptcha');
}

public function weddings()
    {
        $this->load->view('Template/Home/front_header');
        $this->load->view('Home/weddings');
        $this->load->view('Template/Home/front_footer');
    }

【问题讨论】:

    标签: php codeigniter duplicates


    【解决方案1】:

    不要触摸 .htaccess。你有两个选择。

    • 创建一个控制器Weddings.php 并在您的index.php 中返回一个 查看婚礼页面。
    • 另一个选项是使用Home.php控制器然后添加婚礼方法,该方法应该返回婚礼页面视图。您的路线应如下所示:

    $route['default_controller'] = 'Home';
    $route['404_override'] = 'Home';
    $route['/weddings'] = 'home/weddings';

    希望这会有所帮助。谢谢

    编辑

    在您的Weddings.php 控制器constructor 中检查是否存在“Home”并返回 404 错误。见下文

    function __construct()
    {
        parent::Controller();
        
        if($this->uri->uri_segment(1) == 'Home') {
          show_404();
        }
    }

    【讨论】:

    • 谢谢@kikuyu1。我已经添加了婚礼方法是什么,并设置了该路线,但两个网址仍然显示(即mywebsite.com/weddings 和 mywebsite.com/Home/weddings
    • 我已经编辑了 Home.php,因为实际上并没有 Weddings.php。你可以看到顶部有什么。一切都安排在此。我尝试添加函数 __construct() 中提供的代码,但它导致了错误。我应该把它放在别的地方吗?感谢您的帮助。
    • 在parent::__construct();以下和$this-&gt;load-&gt;model('Admin_model');以上添加if($this-&gt;uri-&gt;uri_segment(1) == 'Home') { show_404(); }
    • 你是说文件/application/controllers.Weddings.php不存在?
    • 没错。它最初是用/application/controllers/Home.php 设置的,然后所有视图都被分割在/Home 下,所以有一个application/views/Home/weddings.php。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 2011-05-09
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多