我正在协助一个Codeigniter网站,但没有它的背景。已经注意到有重复的页面内容。当我深入研究时,它们不是实际的页面,而是指向相同视图的控制器。我试图在网站根目录下的.htaccess文件中设置301个重定向,但没有成功。在application/config/routes.php中,注意到以下内容:
$route['default_controller'] = 'Home';
$route['404_override'] = 'Home';
例如,有一个页面http://mywebsite.com/weddings,然后http://mywebsite.com/Home/weddings是指向相同视图的另一个控制器。我试图在删除指向主页/婚礼的额外控制器后添加301重定向,但现在主页/婚礼只是重定向到主页,因为它是用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');
}
不要触摸.htaccess。您有两个选项。
- 创建一个控制器
Weddings.php
,并在您的index.php
中返回查看婚礼页面 - 另一种选择是使用
Home.php
控制器,然后添加婚礼方法,该方法应返回婚礼页面视图。您的路线应如下所示:
$route['default_controller'] = 'Home';
$route['404_override'] = 'Home';
$route['/weddings'] = 'home/weddings';
希望这会有所帮助。谢谢
编辑
在Weddings.php
控制器constructor
中,检查是否存在"主页"并返回404错误。见下文
function __construct()
{
parent::Controller();
if($this->uri->uri_segment(1) == 'Home') {
show_404();
}
}