Codeigniter与mod_rewrite重复内容

时间:2014-02-07 20:55:30

标签: .htaccess codeigniter duplicate-content

在codeigniter中,一旦启用了短网址,您就有可能出现重复内容,因为尽管您的新网址如下所示:

http://domain.com/privacy_policy

您仍然可以手动访问旧的链接,这些链接在您输入时仍会加载:

http://domain.com/index.php/privacy_policy

根据手册,我的htaccess文件如下所示:

RewriteEngine On
RewriteBase /

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

我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:1)

config/config.php上,删除index.php

上的$config['index_page']
$config['index_page'] = '';

答案 1 :(得分:1)

您可以通过将用户代理重定向到新网址来解决此问题。

方法#1:使用htaccess

RewriteBase /后面使用以下内容作为第一个RewriteRule:

RewriteCond %{THE_REQUEST} index\.php
RewriteRule ^index.php(?:/(.*))?$ $1 [R=301,L]

如果您未使用$1,则可能需要将http://example.com/$1更改为RewriteBase

其他规则必须遵循上述规则。

方法#2:使用PHP处理

我建议extend the CI_Controller如下:

class MY_Controller extends CI_Controller
{
    public function __construct()
    {
        // Execute CI_Controller Constructor
        parent::__construct();

        // Get the index page filename from config.php
        // For perior to PHP 5.3 use the old syntax.
        $index = index_page() ?: 'index.php';

        // Whether the 'index.php' exists in the URI
        if (FALSE !== strpos($this->input->server('REQUEST_URI', TRUE), $index))
        {
            // Redirect to the new address
            // Use 301 for permanent redirection (useful for search engines)
            redirect($this->uri->uri_string(), 'location'/*, 301*/);
        }
    }
}

但是,搜索引擎不会将<{1}},的网址编入,除非您在网页中使用了此类网址。< / p>

此外,您可以在页面的canonical link element页面中使用 make search engines index only one version 作为搜索结果:

index.php/privacy_policy

特别是在CodeIgniter中:

<link rel="canonical" href="http://domain.com/privacy_policy">