Codeigniter:清理我的URL(删除index.php)后,我无法将访问我网站的用户重定向到新的干净URL

时间:2012-05-31 08:28:22

标签: php .htaccess codeigniter url mod-rewrite

我努力(因为托管公司,godaddy)在完成此操作后从我网站的网址中删除index.php?。 之后我注意到有些用户使用旧网址(index.php?/)来访问我的网站 因此,我尝试使用 301 重定向重定向来自index.php?个网页的用户,但没有运气。
我在互联网上搜索了一下,
 但我认为问题背后的原因是我需要它从所有网址重定向 已包含index.php?/example.com或同一页面请求,但未包含index.php?/(首选)。

例如:请求example.com/index.php?/site/category/etc将导致example.comexample.com/site/category/etc(首选方法)。
任何其他URL都将被视为相同。

这是我当前的.htaccess文件(与此问题无关):

RewriteEngine On
RewriteBase /

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

更新
尝试php解决方案:(归功于Robin Castlin)
我尝试使用钩子(根据答案),但没有奏效! 我从配置中启用hooks并且URL帮助程序已自动加载 此函数位于application/hooks/MY_hooks.php

function redirectToNewURL(){

    if(preg_match('~/index.php?/~', $_SERVER['REQUEST_URI'])) {//check if the URL has index.php 
        header('Location: '.current_url(), true, 301); //redirect
        exit;
    }
}  

我如何设置钩子:
来自application/config/hooks.php
我把这个简单的数组:

$hook['pre_controller'] = array(
    'class' => '',
    'function' => 'redirectToNewURL',
    'filename' => 'MY_hooks.php',
    'filepath' => 'hooks'
);

最终,我没有结果。

1 个答案:

答案 0 :(得分:1)

$CI =& get_instance();

$CI->load->helper('url');

if (preg_match("~/index\.php\?/~", $_SERVER['REQUEST_URI'])) {
    header('Location: '.current_url());
    exit;
}

将它添加到钩子或自动加载的助手应该这样做。