0

在我的 codeigniter 项目中,我有以下 htaccess 文件从 URL 中删除 index.php

RewriteEngine on
RewriteCond $1 !^(index\.php|js|media|style|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

我正在使用搜索表单(使用表单助手)。由于它是基于 POST 的,我创建了一个名为“pre_search”的控制器来将其重定向到搜索控制器,以便 POST 的数据将在 URL 中可见,并且我可以将它与 URI 助手的段方法一起使用。

所以我的 pre_search 控制器

<?php

class Presearch extends CI_Controller {

    //just to make form POST data visible in URL string for search
    public function index() {
        redirect('search/' . $this->input->post('term'));
    }
}

搜索控制器进行真正的搜索。同时,我已允许 URL 中的所有字符进行测试。

$config['permitted_uri_chars'] = '';

我现在的问题是,当我在 URL 中有百分号 (%) 时,它会显示错误的请求。我认为这是apache的响应,codeigniter与它无关。

经过一些研究,我发现有人建议通过像这样修改 htaccess 来解决这个问题

RewriteRule ^(.*)$ /index.php/$1 [B,L]

我已经尝试过这种方法,它破坏了一切。

由于 % 符号未编码,因此我也尝试在我的 pre_search 控制器中像这样使用

redirect('search/' . urlencode($this->input->post('term')));

但没有解决问题。

那么解决这个问题的最佳方法是什么?我知道这是apache问题。我只是在说明我的 codeigniter 代码以澄清我的意图。

提前致谢

迪帕克

4

1 回答 1

0

我也这样做,这些是我的参数,我还发现这个链接可能会帮助你使用 htaccess http://www.dracos.co.uk/code/apache-rewrite-problem/

$this->load->library('form_validation');
$this->form_validation->set_rules('s', '','trim|min_length[3]|required|xss_clean');
if ($this->form_validation->run() == FALSE):
    $this->session->set_flashdata('errorMsg', form_error('s'));
    redirect($this->session->userdata['redirectUrl']);
else:
    redirect(base_url() . $this->lang->line('link_search') . '/' . $this->functions->convertToUrl($this->functions->secureString($this->input->post('s', TRUE))));
endif;

我的配置值

 $config['permitted_uri_chars'] = 'a-z 0-9~%\.\:_\-ñ';
 $config['uri_protocol'] = 'PATH_INFO';

我将 POST 转换为清晰的 url,将字符更改为允许的字符,然后进行重定向。

于 2012-06-22T07:13:15.177 回答