0

私の codeigniter プロジェクトでは、URL から index.php を削除するための次の htaccess ファイルがあります。

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の問題であることを知っています。私の意図を明確にするために、コードイグナイターコードを示しているだけです。

前もって感謝します

ディーパック

4

1 に答える 1

0

私は同じことをします、これらは私のパラメータです、そして私はまたそれがhtaccesshttp://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 に答える