web-dev-qa-db-ja.com

codeigniterのURLのアンダースコアをダッシュ​​に置き換える方法は?

Seoの理由から、codeigniterのURLのアンダースコアをダッシュ​​に変更する最も簡単な解決策を知りたいです。

私のコントローラーは次のようになります。

public function request_guide() {
...Load view etc...
}

したがって、このページを参照するには、次の場所に移動する必要があります。

www.domain.com/request_guide

しかし、私はもっとseoにやさしくなり、アンダースコアの代わりにダッシュを使用したいと思っています。

www.domain.com/request-guide

Codeigniter関数にはアンダースコアが必要だという印象を受けています(間違っている可能性があります)。

以前のプロジェクトでは、単にmod_rewriteを使用していましたが、これらのアクションはルートを使用して実行できると思います。

アンダースコアをダッシュ​​に置き換えてURLを書き直す最も簡単な方法は何ですか?

20
hairynuggets

で見つかったルート構成

config/routes.php

ここにあなたの友達です。

シンプルな

$route['request-guide'] = "request_guide" ;

あなたのためにこれを行います。

28
devrooms

それは本当にあなたの意図に依存します。 1ページだけを変更したい場合は、devrooms 'ソリューションが最適です。

$route['request-guide'] = "request_guide";

ただし、これをWebサイトのデフォルトの動作にしたい場合は、コアルータークラスを次のように拡張する必要があります(ソース: [CodeIgniterでアンダースコアの代わりにハイフンを使用]

  1. 'application/core'に新しいファイルを作成し、 'MY_Router.php'という名前を付けます。
  2. このコードを挿入します。

    <?php
    
    defined('BASEPATH') || exit('No direct script access allowed');
    
    class MY_Router extends CI_Router {
    
        function _set_request ($seg = array())
        {
            // The str_replace() below goes through all our segments
            // and replaces the hyphens with underscores making it
            // possible to use hyphens in controllers, folder names and
            // function names
            parent::_set_request(str_replace('-', '_', $seg));
        }
    
    }
    
    ?>
    

UPDATE(2015年10月26日):@ Thomas Woodが述べたように、CodeIgniter3でこれを行うためのより良い方法があります:

$route['translate_uri_dashes'] = TRUE;
47
Stan

Code Ignitor 3には、次のものが組み込まれています。

$route['translate_uri_dashes'] = FALSE;

TRUEに変更するだけで、_または-のいずれかを使用できます。

ドキュメント

28
Thomas Wood

Application/config /routes.phpを開いて変更します

$route['translate_uri_dashes'] = TRUE;

それはあなたがする必要があることです。

これで、www.domain.com/request-guideにアクセスすると、request_guideコントローラーがインスタンス化されます。

_(アンダースコア)を含む名前のすべてのコントローラーで機能します。

8
Usman Ahmed

Codeigniterのカスタムルーティングをご覧ください http://codeigniter.com/user_guide/general/routing.html

$route['request-guide'] = "request_guide";
2
luckytaxi

あなたができることは、カスタムフックを作成することです(PST ...基本的なCodeIgniterスキルが必要です):CodeIgniterに関する詳細情報 フック-フレームワークコアの拡張

/*
 * the hooks must be enabled from the config file
 * replace underscore with dashes (hyphens) for SEO
 */

function prettyurls() {
    if (is_array($_GET) && count($_GET) == 1 && trim(key($_GET), '/') != '') {
        $newkey = str_replace('-', '_', key($_GET));
        $_GET[$newkey] = $_GET[key($_GET)];
        unset($_GET[key($_GET)]);
    }
    if (isset($_SERVER['PATH_INFO']))
        $_SERVER['PATH_INFO'] = str_replace('-', '_', $_SERVER['PATH_INFO']);
    if (isset($_SERVER['QUERY_STRING']))
        $_SERVER['QUERY_STRING'] = str_replace('-', '_', $_SERVER['QUERY_STRING']);
    if (isset($_SERVER['ORIG_PATH_INFO']))
        $_SERVER['ORIG_PATH_INFO'] = str_replace('-', '_', $_SERVER['ORIG_PATH_INFO']);
    if (isset($_SERVER['REQUEST_URI']))
        $_SERVER['REQUEST_URI'] = str_replace('-', '_', $_SERVER['REQUEST_URI']);
}

ファイルにcustomhooks.phpという名前を付けました。

次に、これをapplication/configのhooks.phpファイルに追加します。

$hook['pre_system'] = array(
    'class' => '',
    'function' => 'prettyurls',
    'filename' => 'customhooks.php',
    'filepath' => 'hooks',
    'params' => array()
);

フックを有効にするには、application/config/config.phpファイルを編集する必要があります

$config['enable_hooks'] = TRUE;

追加:

$ this-> uri-> uri_string()を使用すると、ハイフンでつながれたままになるように、次のようにします コアシステムクラスの作成

class MY_URI extends CI_URI {

    function uri_string() {
        return str_replace('_', '-', $this->uri_string);
    }

}
1
Waqleh

この_remap()メソッドを使用して、このような動作を処理できます。このメソッドをコントローラーに配置するか、コアコントローラーを作成してに配置します。

public function _remap($method, $params = array()){
    if(method_exists($this, $method)){
        return call_user_func_array(array($this, $method), $params);
    }else{
        $method = str_replace("-", "_", $method);
        if(method_exists($this, $method)){
            return call_user_func_array(array($this, $method), $params);
        }
    }
    show_404();
}
0
Sajjad Ashraf