在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]
我该怎么做才能解决这个问题?
答案 0 :(得分:1)
在config/config.php
上,删除index.php
$config['index_page']
$config['index_page'] = '';
答案 1 :(得分:1)
您可以通过将用户代理重定向到新网址来解决此问题。
在RewriteBase /
后面使用以下内容作为第一个RewriteRule:
RewriteCond %{THE_REQUEST} index\.php
RewriteRule ^index.php(?:/(.*))?$ $1 [R=301,L]
如果您未使用$1
,则可能需要将http://example.com/$1
更改为RewriteBase
。
其他规则必须遵循上述规则。
我建议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">